Windows 使用管道时,如何检测diskpart中的错误?
我试图通过使用通过管道发出的命令替换用于自动化diskpart的临时脚本文件(即diskpart/s脚本文件),来消除它,但是我似乎不知道如何检测diskpart何时抛出错误。如果您有一个驱动器N:请使用不存在的驱动器更改选择卷N,以便diskpart将生成错误:Windows 使用管道时,如何检测diskpart中的错误?,windows,cmd,pipe,disk-partitioning,errorlevel,Windows,Cmd,Pipe,Disk Partitioning,Errorlevel,我试图通过使用通过管道发出的命令替换用于自动化diskpart的临时脚本文件(即diskpart/s脚本文件),来消除它,但是我似乎不知道如何检测diskpart何时抛出错误。如果您有一个驱动器N:请使用不存在的驱动器更改选择卷N,以便diskpart将生成错误: ( ( echo select disk 0 echo list partition echo select vol n ) | diskpart set foundErr=1 if errorlevel 0 if
(
(
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
我基于上面的代码,但它不起作用
这是可能的,还是使用管道阻塞或干扰diskpart错误检测?我还没有测试它。但这应该是可行的:
(
(
echo select disk 0
echo list partition
echo select vol n
) | diskpart
if "%errorlevel%"=="0" (
if not "%errorlevel%"=="1"
(
set "foundErr="
)
) Else set foundErr=1
if defined foundErr goto errorMsg
echo Success!
goto :EOF
)
:errorMsg
echo diskpart failed!
goto :EOF
pause
您知道
set
也会设置errorlevel
?“CMD批处理脚本更加一致,在运行每个命令后都会设置ERRORLEVEL”source I正在使用CMD扩展名。我在别处读到过if、set、goto和其他一些命令没有设置errorlevel。然而,总的来说,我发现Windows.bat/.cmd语言很糟糕,是最不利于高效编程的语言之一。在我30多年的IT工作和我使用或阅读的所有脚本语言中,Windows batch被列为我见过的最差的脚本语言之一。在这个项目之后,如果我可以避免的话,我将不会在任何重要的事情上再次使用它。是的,那将是因为它从一开始就没有被设计成一种编程语言。它是一个批处理解释器,用于非常简单的任务,几乎可以肯定,对于您正在尝试执行的任务,它不是一个合适的选择-简单的旧C可能是我的第一选择,但如果您坚持使用脚本语言,请尝试Powershell。