Windows 使用管道时,如何检测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

我试图通过使用通过管道发出的命令替换用于自动化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 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。