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

时间:2018-06-04 10:24:26

标签: 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 \" ,它将开始从错误的文件夹中删除文件,因为cd命令不起作用。

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

2 个答案:

答案 0 :(得分:1)

@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消息,{{1}将不会如指定的那样。

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

答案 1 :(得分:0)

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

以下单行批处理脚本应该与脚本相同,只有在位置存在时才这样做!

&&

for (i = 0; i < uploadFileList.Count; i++) { choosedProjetName = uploadFileList[i]; ShowHome(); cancel_upload_model_button.Visibility = Visibility.Visible; ModelUploadTXT.Text = "Uploading " + choosedProjetName + FooterProgressBar.Value.ToString("f0") + " % " + (bytesIn / 1000000).ToString("f2") + "Mb /" + (totalBytes / 1000000).ToString("f2") + "Mb"; FooterProgressBar.Foreground = Brushes.Orange; while (percentage < 100) { continue; } projects_tab.IsEnabled = true; wait_for_upload_text.Visibility = Visibility.Hidden; ModelUploadTXT.Text = "Upload done!"; FooterProgressBar.Value = 0; FooterProgressBar.Foreground = Brushes.LimeGreen; cancel_upload_model_button.Visibility = Visibility.Hidden; SelectedFileText.Text = "Choose model(s) to import!"; try { uploadClient.Dispose(); } catch (Exception asd) { } } 运算符后的命令仅在紧接其之前的命令返回成功时运行。