2017-03-16 68 views
1

我在批处理文件中使用以下代码将所有MP3文件从一组目录(始终更改)复制到特定位置,然后删除mp3文件。代码有效,但大多数情况下没有找到MP3文件。我正在尝试清理在批处理窗口中显示的内容。当没有找到MP3文件时,我总是收到“找不到文件”消息。我试图压制找不到的文件。产生错误的行是for/f“delims行(特别是dir部分)。如果我rem复制和del行我仍然得到错误。我试着把> nul和2> nul在目录的末尾首先在结束报价之前,然后在每个位置之后,在双重报价之前,我仍然得到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 
) 

感谢,

Roveer

+0

AFAICS你不需要用''for/f'与'dir'在这里,只需'for/r %% f in(%dsource%\%ftype%)do ...'应该给出如果存在相同的文件名列表,并且没有错误消息。 –

+0

Dave,使用修改后的代码时,我找不到相同的结果。我改变了我的示例代码(从del到dir的最后一行并重新复制副本),以查看它会产生什么。我的代码产生一个找到的文件列表(只是filename.ext)。 (%dsource%\%ftype%)中的for/r %% f ...代码运行了一段时间,但没有输出。 – Roveer

+0

对不起,我测试了几个变种,但贴了错误的一个。尝试'for/r%dsource%%% f在(%ftype%)做...有%% f的东西...' –

回答

2
for /f "delims=" %%f in ('dir /a-d /b /s "%dSource%\%fType%" 2^>nul') do (

插入符号^“逃逸”的>,告诉cmd在于它的dir命令的一部分(如果它是有效的),而不是for(它是无效的)

(同样适用于| - 通常用于管道到find/findstr

+0

哦,我太亲近了!我去看看发布后,发现^声明,并尝试了它,我一定没有把它放在正确的地方。非常感谢您的文章。它解决了我的问题。 – Roveer