![](/img/trans.png)
[英]batch file to run command on folder and sub-folders with specific name
[英]batch - if folders contains the specific sub folder move it
问题:它只是将一个文件夹“FolderB.tag”移动到“GoodFolder”
问题:如何按照规则将所有文件夹移动到另一个文件夹
我的脚本.bat
@echo off
md GoodFolder
md BadFolder
for /d %%i in (*.tag) do set check=%%i
if exist "%check%\SubFolderA" (move "%check%" "GoodFolder")
if not exist "%check%\SubFolderA" (move "%check%" "BadFolder")
pause
exit /b
我的目录
BadFolder
GoodFolder
+---Folder C.tag
| +---SubFolderA
| \---SubFolderB
+---FolderA.tag
| \---SubFolderB
+---FolderB.tag
| \---SubFolderA
作为我评论的后续,您需要做的是将if
命令包含在 for 循环的do
部分中。
根据要求示例:
@Echo Off
MD GoodFolder 2>NUL
MD BadFolder 2>NUL
For /D %%I In (*.tag) Do (
If Exist "%%I\SubFolderA\" (
Move "%%I" "GoodFolder"
) Else Move "%%I" "BadFolder"
)
Pause
Exit /B
你会注意到我没有不必要地包含变量的设置。 如果您出于其他目的需要这样做,那么您需要延迟该变量的扩展以便有效地使用它。
例子:
@Echo Off
MD GoodFolder 2>NUL
MD BadFolder 2>NUL
For /D %%I In (*.tag) Do (
Set "check=%%I"
SetLocal EnableDelayedExpansion
If Exist "!check!\SubFolderA\" (
Move "!check!" "GoodFolder"
) Else Move "!check!" "BadFolder"
EndLocal
)
Pause
Exit /B
EnableDelayedExpansion 确实解决了您的问题,但我通常喜欢在处理 for 循环时调用子例程。 两种解决方案都应该解决您的问题。
@Echo Off
MD GoodFolder 2>NUL
MD BadFolder 2>NUL
For /D %%I In (*.tag) Do Call :Sorting "%%I"
Pause
Exit /B
:Sorting
If Exist "%~1\SubFolderA\" (
Echo moving %1 to GoodFolder
Move "%*" "GoodFolder"
) Else (
Echo moving %1 to BadFolder
Move "%~1" "BadFolder"
)
GoTo :EOF
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.