2016-09-28 24 views
0

我試圖從沒有擴展,操作.bz2最終所有子目錄移動文件: enter image description here批次:將文件擴展名,如果不是(操作.bz2)

應該移到哪AREN所有分機「T與(操作.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

如果我把%F的不是移動/ Y *它會移動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/)?(http://stackoverflow.com/q/31975093)在('dir/B/S「C:\ AppServ \ fastdl \ *」')中使用'for/F「delims =」%F ..)'(類似於[Noodles'answer](http://stackoverflow.com/a/39761641))確保目錄樹在被操作之前被枚舉*。順便說一句,你應該使用'if'%〜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