在Windows命令行中禁止错误消息显示

24

假设我已经在文件路径下创建了一个名为"C:\users\charqus\desktop\MyFolder"的文件夹,并在CMD中运行了以下命令:

mkdir "C:\users\charqus\desktop\MyFolder"

我收到了这样的消息:"子目录或文件C:\users\charqus\desktop\MyFolder已经存在".

因此,是否有命令可以在命令行中摆脱这些返回的消息? 我尝试了echo off但这不是我要找的。


5
很简单,如果"C:\users\charqus\desktop\MyFolder"不存在,则创建该文件夹:IF NOT EXIST "C:\users\charqus\desktop\MyFolder\." mkdir "C:\users\charqus\desktop\MyFolder" - Leptonator
2个回答

56

将输出重定向到 nul

mkdir "C:\users\charqus\desktop\MyFolder" > nul

根据命令的不同,您可能还需要重定向错误信息:

mkdir "C:\users\charqus\desktop\MyFolder" > nul 2> nul

Microsoft在此处描述了选项,这是有用的阅读。


那么,如果我只使用一次 > nul,这将让我摆脱警告,如果我使用 > nul 2 > nul,这将让我摆脱警告和错误,我是对的吗? - charqus
3
严格来说,>nul 重定向的是标准输出流 stdout,而 2>nul 重定向的是错误输出流 stderr。这两个输出流通常出现在命令窗口中。使用哪个输出流(或同时使用哪些)取决于具体的命令。 - Roger Rowland
7
针对楼主的情况,第二个重定向可以是 2>&1 ,它将把 STDERR 发送到已经被重定向的 STDOUT 相同的位置。在实际使用中,这种方式比使用两个 >nul 更常见,因此你会在代码中看到它的使用。 - foxidrive
2>nul mkdir "C:\users\charqus\desktop\MyFolder" 也是可行的,而且在TeamCity中需要使用这种风格。 - 79E09796

6

之前的回答展示了如何压制命令的所有输出。这会移除在命令执行失败时显示的有用错误信息。下面的例子展示了更好的方法:

C:\test>dir
     Volume in drive C has no label.
     Volume Serial Number is 4E99-B781

     Directory of C:\test

    20/08/2015  20:18    <DIR>          .
    20/08/2015  20:18    <DIR>          ..
                   0 File(s)              0 bytes
                   2 Dir(s)  214,655,188,992 bytes free

C:\test>dir new_dir >nul 2>nul || mkdir new_dir >nul 2>nul || mkdir new_dir

C:\test>dir new_dir >nul 2>nul || mkdir new_dir >nul 2>nul || mkdir new_dir

如上所示,此命令成功地抑制了原始警告。然而,如果目录无法创建,就像以下示例中:

C:\test>icacls c:\test /deny "Authenticated Users":(GA)
processed file: c:\test
Successfully processed 1 files; Failed processing 0 files

C:\test>dir new_dir2 >nul 2>nul || mkdir new_dir2 >nul 2>nul || mkdir new_dir2
Access is denied.

那么,就像可以看到的那样,会显示一个描述问题的错误消息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接