【发布时间】:2017-05-29 07:55:06
【问题描述】:
我有以下文件和文件夹结构(使用真实姓名):
Carabidae/Pterostichinae/FolderNameXXX/dor/StackXXX/files.tif
我的问题是我需要从 StackXXX 文件夹中获取一个特定文件 PM*.* 到它们各自的 /dor 父文件夹中。然后可以删除 StackXXX 文件夹。
有数百个文件夹名称。理想情况下,我想要一个可以从 Carabidae 文件夹运行的批处理文件。
这需要一个批处理文件,因为会不断添加新的文件夹名称。
经过大量搜索,我从this StackOverflow answer找到了一个半工作的解决方案:
for /f "delims==" %%i in ('dir /a:d /b') do for /f "delims==" %%f in ('dir %%i /a:d /b') do (move "%%i\%%f\PM*.*" "%%i"&&rd "%%i\%%f" /s /q)
它移动文件并删除文件夹,就像我想要的那样。但问题是它仅在从 FolderName 文件夹运行时才有效,这违背了脚本的省时目的。我不知道如何修改它以递归到子文件夹,所以我可以从顶层文件夹运行它。
非常感谢您的帮助!
【问题讨论】:
-
for /r可以帮助你... -
我也是这么认为的,但它不适用于那行代码。我尝试分别替换
for /f和每一个,都没有工作... -
您了解
for /r的工作原理吗?更多信息和使用方法请查看ss64.com/nt/for_r.html -
你必须使用标准的Windows路径分隔符
\而不是/,这是开关指示器!否则,可能会发生意外行为... -
当你修改你正在枚举的目录树时,不要不要使用
for /R,否则你可能会收到错误;原因见this thread;for /F与dir /B [/S]一起确保在任何项目被修改之前枚举目录(树)...
标签: windows batch-file cmd windows-7