for / R do del命令删除SPECIFIC文件

时间:2013-05-04 01:00:03

标签: cmd delete-file

我一直在清理4 TB驱动器上的一些文件。问题是,我有许多重复的文件。这些重复项附加了一个数字,因此它们很容易“找到”。

但是,我需要一种快速的方法来删除它们,而不会影响原始文件。

例如:

03 Song To Sing By.mp3
03歌曲唱歌由1.mp3

我需要删除任何具有1.mp3

的内容

我试过了:

for /R C:\MUSICTEST\ %F in (*1.mp3) do del "%F"

但它正在删除这两个文件。

想法?想法?

2 个答案:

答案 0 :(得分:1)

@ECHO off
SETLOCAL
(
for /R C:\MUSICTEST\ %%F in (*.mp3) do IF EXIST "%%~dpnF 1.mp3" (
FC /b "%%~fF" "%%~dpnF 1.mp3" >nul
 IF NOT ERRORLEVEL 1 ECHO del "%%~dpnF 1.mp3"
)
)>musiczap.bat

这批次应该可以胜任。

对于找到的每个x.mp3,请查看同一目录中是否也存在x 1.mp3。如果是,请比较两者,如果它们相同,则将删除行回显到'musiczap.bat'文件。

在运行之前对musiczap.bat进行审核取决于您。

dir /s "c:\musictest\* 1.mp3"
然后

应该显示剩余的* 1.mp3个文件

<小时/> 这是我的测试:

目标目录:

 Volume in drive C has no label.
 Volume Serial Number is 12A3-6FE2

 Directory of c:\musictest

04/05/2013  10:55    <DIR>          .
04/05/2013  10:55    <DIR>          ..
04/05/2013  10:49                 0 03 song to sing at 1.mp3
04/05/2013  10:45                 0 03 song to sing by 1.mp3
04/05/2013  10:45                 0 03 song to sing by.mp3
04/05/2013  10:55                 5 03 song to sing it 1.mp3
04/05/2013  10:55                 5 03 song to sing it.mp3
04/05/2013  10:54                 0 03 song to sing to 1.mp3
04/05/2013  10:54           105,351 03 song to sing to.mp3
               7 File(s)        105,361 bytes
               2 Dir(s)  614,691,926,016 bytes free

批量运行的结果:

del "C:\musictest\03 song to sing by 1.mp3"

注意:
  “at”只有一个“1”所以没有删除
  “by”只是“name”和“name 1”的文件内容相同的一个   “它”长度相同,但内容不同   “to”的长度不同

需要运行生成的文件“musiczap.bat”来删除文件。除非你先阅读它,否则可能不是一个好主意 - 特别是如果你已经开启了ECHO

如果批次似乎卡住了,请尝试修改批次

@ECHO off
SETLOCAL
(
for /R C:\MUSICTEST\ %%F in (*.mp3) do IF EXIST "%%~dpnF 1.mp3" (
 echo comparing "%%~fF" "%%~dpnF 1.mp3"
 FC /b "%%~fF" "%%~dpnF 1.mp3"
 IF NOT ERRORLEVEL 1 ECHO del "%%~dpnF 1.mp3"
)
)

请注意,这可能会产生一整套数据 - 但可能会让人感到不安fc

我看不出哪个文件对导致了问题,请将“&gt; nul”重新附加到fc行的末尾。这将取消fc输出,但应显示fc卡住的文件名。

答案 1 :(得分:0)

试试这个(如果输出正常,则删除echo

for /f %%i in ('dir /s /b /a-d C:\MUSICTEST\*.mp3 ^|findstr /ir "[0-9]\.mp3$" ') do echo del "%%~i"