Проверьте, правильно ли выполнена команда изменения каталога в окнах командного файла - PullRequest
0 голосов
/ 04 июня 2018

Я работаю над сценарием пакетного файла, в котором мое требование состоит в том, чтобы перейти в папку из текущего каталога и удалить некоторые файлы.

Что происходит, если путь не найден, и начинается удаление файлов изнеправильное местоположение.

Здесь мой сценарий

set BuildPath="%CD%"
set DrivePath="%CD:~0,3%"

cd "%BuildPath%\Mac\Data\"
del * /S /Q
rmdir /S /Q "%BuildPath%\Mac\Data\"

Теперь, что происходит в приведенном выше сценарии, если "% BuildPath% \ Mac \ Data \" не найденон начнет удалять файлы из неправильной папки, потому что команда cd не работает.

Я хочу проверить, было ли изменение каталога успешным или нет.если это не удалось, я не хочу выполнять никаких действий.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Ваш скрипт излишне устанавливает переменную в имя существующей переменной перед установкой переменной, которая вообще не используется.Затем он удаляет все файлы в текущем дереве перед удалением всех каталогов, когда это следует делать только при удалении каталогов.

Следующий однострочный пакетный скрипт должен делать то же самое, что и ваш скрипт, и делать это только такесли местоположение существует!

@CD /D "%__CD__%Mac\Data" 2>Nul && RD /S /Q "%__CD__%Mac\Data">Nul 2>&1

Команда, следующая за оператором &&, запускается только в том случае, если непосредственно перед ней команда вернулась как успешная.

0 голосов
/ 04 июня 2018
@ECHO Off
SETLOCAL
PUSHD u:\sourcedir
set "BuildPath=%CD%"
set "DrivePath=%CD:~0,3%"

cd "%BuildPath%\Mac\Data"
IF ERRORLEVEL 1 ECHO fail cd
IF /i "%cd%" neq "%BuildPath%\Mac\Data" echo FAIL&GOTO :EOF 
ECHO del * /S /Q
ECHO rmdir /S /Q "%BuildPath%\Mac\Data\"
popd

GOTO :EOF

Примечание: U:\sourcedir - это мой тестовый каталог.

Если cd будет успешным, errorlevel будет 0, поэтому сообщение fail cd будет не будет выдано.cd после того, как изменение будет содержать тот же путь, как указано (я опускаю обратную косую черту).

С другой стороны, если изменение не удастся (каталог не существует), errorlevel станет1 и будет выдано сообщение fail cd, а cd будет не таким, как указано.

Итак, два метода здесь - errorlevel и compare-directory-name.Это причина для назначения строк с использованием синтаксиса set "var=value", где можно контролировать количество и положение ушей кролика.

...