繁体   English   中英

批处理 - 如果文件夹包含特定的子文件夹,请移动它

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM