答案 0 :(得分:7)
当然是。一切皆有可能。 :d
此批处理实际上并不删除文件。它只是回应比较的结果。如果找到两个相同的文件,则可以删除其中一个文件。
将代码保存为CleanDuplicates.bat
,然后使用CleanDuplicates {Folder}
按原样提供,不作任何保证!我不想让你敲门,因为整个服务器搞砸了。 ;-)
代码实际上是递归调用自己的。这可能以不同的方式完成,但嘿,它的工作原理。它也会在新的cmd中再次启动,因为这样可以更轻松地进行清理。我在Windows Vista Business中测试了该脚本,但它也适用于Server 2003。嘿,它甚至有一个帮助功能。 ;-) 它包含两个循环,每个循环返回每个文件,因此当您实现实际删除时,它可能会报告某些文件不存在,因为它们在之前的迭代中被删除。
@echo off
rem Check input. //, /// and //// are special parameters. No parameter -> help.
if %1check==//check goto innerloop
if %1check==///check goto compare
if %1check==////check goto shell
if %1check==/hcheck goto help
if %1check==check goto help
rem Start ourselves within a new cmd shell. This will automatically return to
rem the original directory, and clear our helper environment vars.
cmd /c %0 //// %1
echo Exiting
goto end
:shell
rem Save the current folder, jump to target folder and set some helper vars
set FCOrgFolder=%CD%
cd %2
set FCStartPath=%0
if not exist %FCStartPath% set FCStartPath=%FCOrgFolder%\%0
rem Outer loop. Get each file and call ourselves with the first special parameter.
for %%a in (*.*) do call %FCStartPath% // "%2" "%%a"
goto end
:innerloop
rem Get each file again and call ourselves again with the second special parameter.
for %%b in (*.*) do call %FCStartPath% /// %2 %3 "%%b"
goto end
:compare
rem Actual compare and some verbose.
if %3==%4 goto end
echo Comparing
echo * %3
echo * %4
fc %3 %4 >nul
rem Get results
if errorlevel 2 goto notexists
if errorlevel 1 goto different
echo Files are identical
goto end
:different
echo Files differ
goto end
:notexists
echo File does not exist
goto end
:help
echo Compares files within a directory.
echo Usage: %0 {directory}
goto end
:end