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

Windows 检查更改目录命令是否在批处理文件窗口中正确执行,windows,batch-file,batch-processing,cd,Windows,Batch File,Batch Processing,Cd,我正在编写一个批处理文件脚本,其中我的要求是从当前目录遍历到文件夹并删除一些文件 如果没有找到路径,就会从错误的位置删除文件 这是我的剧本 set BuildPath="%CD%" set DrivePath="%CD:~0,3%" cd "%BuildPath%\Mac\Data\" del * /S /Q rmdir /S /Q "%BuildPath%\Mac\Data\" 现在,在上述脚本中发生的情况是,如果未找到%BuildPath%\Mac\Data\”,它将开始从错误的文件夹中

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

如果没有找到路径,就会从错误的位置删除文件

这是我的剧本

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
设置“构建路径=%CD%”
设置“驱动器路径=%CD:~0,3%
cd“%BuildPath%\Mac\Data”
如果错误级别1回显失败cd
如果/i“%cd%”neq“%BuildPath%\Mac\Data”回显失败并转到:EOF
回音del*/S/Q
ECHO rmdir/S/Q“%BuildPath%\Mac\Data”
邻苯二胺
后藤:EOF
注意:
U:\sourcedir
是我的测试目录

如果
cd
成功,
errorlevel
0
因此将不会发出
fail cd
消息<更改后的code>cd将包含与指定的路径相同的路径(我省略了后面的反斜杠)

另一方面,如果更改不成功(目录不存在),
errorlevel
将变为
1
,并生成
fail cd
消息,并且
cd
将不符合规定


这里有两种方法-
errorlevel
比较目录名
。这就是使用
set“var=value”
语法分配字符串的原因,在这种语法中可以控制兔子耳朵的数量和位置。

在设置一个根本不使用的变量之前,脚本不必要地将一个变量设置为现有变量的名称。然后,在删除所有目录之前,它会删除当前树中的所有文件,而仅删除目录就可以做到这一点

以下单行批处理脚本应与您的脚本执行相同的操作,并且仅当位置存在时才执行此操作

@CD/D“%\uuuuuu CD\uuuuuu%Mac\Data”2>Nul&RD/S/Q“%\uuuuuuu CD\uuuuuuu%Mac\Data”>Nul 2>&1

&&
运算符后面的命令只有在其前面的命令返回为成功时才会运行。

它总是回显失败。不知道为什么。让我告诉你在“%BuildPath%\Mac\Data”目录中会有不同的文件夹和文件好吧,我尝试了
\Mac\Data
作为
u:\sourcedir
的子目录存在和不存在的代码,并且还尝试使用
\Mac\data1
,当然这并不存在。它的行为完全符合我的预期。如果将
echo
设置为
on
,您可能会看到
if/i
正在比较的两个字符串之间的差异。您没有对
echo fail cd
行中的任何报告发表评论。我不清楚PUSHD u:\sourcedir?那是什么。我不想在两者之间保留任何静态路径?你能给我解释一下吗?谢谢
PUSHD u:\sourcedir
将当前目录更改为
u:\sourcedir
,正如我所指出的,这是我的测试目录。这会将当前目录保存在堆栈上,然后切换到目标目录。当执行伴随指令
popd
时,最后保存到堆栈目录的文件将恢复为当前文件。对于此代码,有效的结果是当前目录更改为
u:\sourcedir
,我可以在其中创建(或不创建)代码预期检测到的目录,并且在生成报告时,返回到原始目录。这与您拥有自己的开始目录的情况无关。与其向解决方案提供商提问,不如礼貌地向我提供我的答案的反馈!我的脚注不仅准确地回答了您的问题,
我想检查的是更改目录是否成功。如果没有成功,那么我不想执行任何操作。
,它还可以更高效/简洁地提供替换代码。如果你不喜欢或希望我澄清一些事情,那么就这样做。你不是新来的,应该对那些花时间帮助你解决问题的人表示更多的尊重。