batch - если папка содержит указанную подпапку c, переместите ее - PullRequest
0 голосов
/ 15 апреля 2020

Проблема: перемещается только одна папка «FolderB.tag» в «GoodFolder»

Вопрос: Как сделать так, чтобы она перемещала все папки в другую, следуя правилам

myscript.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

mydirectory

BadFolder
GoodFolder
+---Folder C.tag
|   +---SubFolderA
|   \---SubFolderB

+---FolderA.tag
|   \---SubFolderB

+---FolderB.tag
|   \---SubFolderA

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Как продолжение моего комментария, вам нужно было включить ваши if команды в часть do для l oop.

Пример по запросу:

@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
0 голосов
/ 15 апреля 2020

EnableDelayedExpansion действительно решает вашу проблему, но мне обычно нравится вызывать подпрограммы при работе с циклами. Оба решения должны решить вашу проблему.

@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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...