0

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

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

例如:

03 歌唱 By.mp3
03 歌唱 By 1.mp3

我需要删除任何有 1.mp3

我试过这个:

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

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

想法?想法?

4

2 回答 2

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”文件内容相同的
“it”长度相同,但不同
的“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

我看不到是哪个文件对导致了问题,请将“>nul”重新附加到fc行尾。这将抑制fc输出,但fc应该显示卡住的文件名。

于 2013-05-04T03:05:16.323 回答
0

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

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