【问题标题】:How can I detect errors in diskpart when using a pipe?使用管道时如何检测 diskpart 中的错误?
【发布时间】: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


【解决方案1】:

我还没有测试过。但这应该可行:

(
 (
  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  

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2018-12-18
    相关资源
    最近更新 更多