2016-09-28 4 views
0

は、私が最後に拡張子.bz2を持たないすべてのサブディレクトリからファイルを移動しようとしています: enter image description hereバッチ:拡張子がない場合は、ファイルを移動します(.bz2)

それは上がらないすべての拡張を移動する必要があります

for /R C:\AppServ\fastdl %f in (*) do @if not exist (*.bz2) move /Y *   C:\AppServ\fastdl\not_bzip >NUL 

しかし、このスクリプトは、フォルダを移動しようとしているとも同様失敗している: enter image description here

そして、私が代わりに移動/ Yの%F置く場合(.bz2)私はこれを試してみましたで終わる「T *それは動くでしょうe .bz2ファイル。

答えて

0

あなたは、おそらくこのような何かをしたい:

For /R "C:\AppServ\fastdl" %f In (*) Do @If %~xf NEq .bz2 (@Move /Y "%~f" "C:\AppSrv\not_bzip">Nul) 

注意してください、私はディレクトリへの移行を変更し、あなたが最初にそれを自分で作成する必要があり、それはフォルダツリーのサブディレクトリ以外の場所であることを確認しますあなたはスキャンしています。

+0

ありがとうございました。 – Mike

+0

'for'('/R')ループの内部でディレクトリ(ツリー)を操作することは非常に危険です - この質問を参照してください: '' for 'または 'for/R'はディレクトリを列挙します)?](http://stackoverflow.com/q/31975093) 'for/F" delims = "%dir/B/S" C:\ AppServ \ fastdl \ * "')を使ってdo(。 ..) '([Noodles 'answer](http://stackoverflow.com/a/39761641)に似ています)は、ディレクトリツリーが操作される前に*列挙されることを保証します。ちなみに、拡張子のないファイルでのトラブルを避けるために、 '%"〜 "xf" NEQ ".bz2" 'のような引用符を使うべきです... – aschipfl

+0

危険な言葉は少し劇的だと思います。削除しないでください。私はこの方法で落ちることを理解していますが、実際にはこの実行中のスクリプトを通してツリーが動的に変更される可能性があります。また、拡張子のないファイルの可能性についても同様のことが言えますが、特にOPが簡単なサンプルを投稿したときには起こりそうなことはほとんどありません。 dirコマンドを使用しても、私はまだシステムと隠しファイルをバイパスして** - d **と** - s -h **を指定する方が好きです。すべての用途ではなく一般的な使用に十分な堅牢性を備えています。 – Compo

0
For /f "delims=" %A in ('dir /b /s "c:\windows\syswow64" ^| Findstr /v /I /c:".dll"') Do Echo %A 

dllファイル以外のすべてのファイルを一覧表示します。

+0

実際には検索文字列はファイル名の末尾にマッチするように '.dll $ 'にする必要があります。そうでなければ、 'this.is.not.a.dll.file.txt'のようなものが誤って一致するでしょう... – aschipfl

関連する問題