2016-09-28 60 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