【发布时间】:2016-06-28 03:16:02
【问题描述】:
我正在尝试通过将其替换为通过管道发出的命令来消除用于自动化 diskpart 的临时脚本文件(即 diskpart / s scriptFile),但是我似乎无法弄清楚如何检测 diskpart 何时抛出错误.如果您有一个驱动器 N:将 select vol n 更改为一个不存在的驱动器,这样 diskpart 将生成错误:
(
(
echo select disk 0
echo list partition
echo select vol n
) | diskpart
set foundErr=1
if errorlevel 0 if not errorlevel 1 set "foundErr="
if defined foundErr goto :errorMsg
echo Success!
goto :EOF
)
:errorMsg
echo diskpart failed!
goto :EOF
pause
我将上面的代码基于this answer,但它不起作用。
这是否可能,或者使用管道块或干扰磁盘部分错误检测?
【问题讨论】:
-
您确实意识到
set也会设置errorlevel? “CMD 批处理脚本更加一致,并且会在您运行的每个命令之后设置 ERRORLEVEL”源ss64.com/nt/errorlevel.html -
我正在使用 cmd 扩展。我在别处读到 if、set、goto 和其他一些命令没有设置错误级别。但是,总的来说,我发现 Windows .bat / .cmd 语言很糟糕,是生产性编程最糟糕的语言之一。在我 30 多年的 IT 工作以及我使用或阅读的所有脚本语言中,Windows 批处理必须被列为我见过的最糟糕的脚本之一。在这个项目之后,如果可以避免的话,我不会再将它用于任何重要的事情。
-
是的,那是因为它从一开始就没有被设计成一种编程语言。它是一个批处理解释器,用于非常简单的任务,并且几乎可以肯定不是您尝试做的事情的合适选择 - 普通的旧 C 可能是我的首选,但如果您坚持使用脚本语言,试试 Powershell。
标签: windows cmd pipe disk-partitioning errorlevel