如何在以下批处理文件代码中抑制错误流

Posted

技术标签:

【中文标题】如何在以下批处理文件代码中抑制错误流【英文标题】:How do I suppress the error stream in the following batch file code 【发布时间】:2017-08-07 01:01:15 【问题描述】:

我在批处理文件中使用以下代码将所有 MP3 文件从一组目录(始终在变化)复制到特定位置,然后删除 mp3 文件。该代码有效,但大多数时候找不到 MP3 文件。我正在尝试清理批处理窗口中显示的内容。当找不到 MP3 文件时,我总是收到“找不到文件”消息。我试图压制找不到的文件。产生错误的行是 for /f "delims 行(特别是 dir 部分)。如果我重新复制和 del 行,我仍然会收到错误。我尝试将 >nul 和 2>nul 放在 dir 的末尾先声明在右引号之前,然后在之后的每个位置。在双引号之前,我仍然得到 FNF 但没有其他错误,之后的每个位置都出现意外 > 错误。

如何隐藏此语句中的错误消息?

set dSource=C:\Users\pc\Documents\Recordings\VOX
set dTarget=c:\recordings
set fType=*.mp3
for /f "delims=" %%f in ('dir /a-d /b /s "%dSource%\%fType%"') do (
    copy /V "%%f" "%dTarget%\" 2>nul
    del "%%f" 2> nul
)

谢谢,

流浪者

【问题讨论】:

AFAICS 你在这里不需要for /fdir,只要for /r %%f in (%dsource%\%ftype%) do ... 应该给出相同的文件名列表(如果有的话),如果没有则没有错误消息。 戴夫,使用您修改后的代码时,我没有找到相同的结果。我更改了我的示例代码(最后一行从 del 到 dir 并重新复制了副本)只是为了看看它会产生什么。我的代码会生成一个找到的文件列表(只是 filename.ext)。 for /r %%f in (%dsource%\%ftype%) do ... 代码运行了一段时间,但没有产生任何输出。 对不起;我测试了几种变体,但发布了错误的变体。试试for /r %dsource% %%f in (%ftype%) do ... something with %%f ... 【参考方案1】:
for /f "delims=" %%f in ('dir /a-d /b /s "%dSource%\%fType%" 2^>nul') do (

插入符号^“转义”>,告诉cmd它是dir命令的一部分(它是有效的),而不是for(它是无效的)

| 也是如此 - 通常用于连接到 find/findstr

【讨论】:

哦,我是如此接近!我在发帖后去寻找 ^ 声明并尝试了它,我一定没有把它放在正确的地方。非常感谢你的帖子。它解决了我的问题。

以上是关于如何在以下批处理文件代码中抑制错误流的主要内容,如果未能解决你的问题,请参考以下文章

如果批处理脚本无法写入输出文件,如何忽略错误

我正在尝试使用 Windows 批处理文件来运行 python 代码,但是我遇到了以下错误:

如何在 IAR EWARM 5.4 中抑制警告(从错误转换)

如何在 PowerShell 中将文件作为流逐行处理

如何抑制由我​​无法更改的代码显示的对话框?

如何仅从文件中处理新记录?