我正在处理一个批处理文件脚本,我的要求是从当前目录遍历到该文件夹并删除一些文件。
如果找不到路径,它会开始从错误的位置删除文件。
这是我的剧本
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命令不起作用。
我想检查的是更改目录是否成功。如果不成功,那么我不想做任何动作。
答案 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}将不会如指定的那样。
这里有两种方法 - cd
和errorlevel
。这是使用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)
{
}
}
运算符后的命令仅在紧接其之前的命令返回成功时运行。