检查是否在批处理文件中正确执行了更改目录命令windows

Check if change directory command is executed properly in batch file windows

我正在处理一个批处理文件脚本,我的要求是从当前目录遍历文件夹并删除一些文件。

如果找不到路径,它会开始从错误的位置删除文件。

这是我的脚本

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命令无效。

我想检查的是更改目录是否成功。如果不成功,那么我不想执行任何操作。

@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 将不符合规定。

这里有两种方法 - errorlevelcompare-directory-name。这是使用 set "var=value" 语法分配字符串的原因,其中可以控制兔子耳朵的数量和位置。

您的脚本在设置根本不使用的变量之前,不必要地将变量设置为现有变量的名称。然后在删除所有目录之前删除当前树中的所有文件,当单独删除目录时应该这样做。

以下单行批处理脚本应该与您的脚本执行相同的操作,并且只有在该位置存在时才这样做!

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

&& 运算符后面的命令仅当 运行 之前的命令返回成功时才有效。