Thu*_*mer 5 windows cmd batch-file
我需要一个批处理文件(Windows CMD是解释器,一个.bat)来执行这种类型的任务:
1)搜索文件夹及其子文件夹
2)查找具有相同文件名和扩展名的文件(也称为重复文件)
3)检查它们是否具有相同的尺寸
4)如果同名+相同大小,则回显除第一个以外的所有文件(实际上我需要删除除一个副本以外的所有文件)
感谢您提供的任何帮助
这只是一个初始脚本,仅用于检查文件,文件夹及其子文件夹中的文件及其大小:
@Echo off
Setlocal EnableDelayedExpansion
Set Dir=C:\NewFolder
For /r "%Dir%" %%i in (*) do (
Set FileName=%%~nxi
Set FullPath=%%i
Set Size=%%~zi
Echo "!FullPath!" - SIZE: !Size!
)
Echo.
Pause
Run Code Online (Sandbox Code Playgroud)
这个脚本做你要求的.只需在顶部设置ROOT变量即可指向树的根.
@echo off
setlocal disableDelayedExpansion
set root="c:\test"
set "prevTest=none"
set "prevFile=none"
for /f "tokens=1-3 delims=:" %%A in (
'"(for /r "%root%" %%F in (*) do @echo %%~znxF:%%~fF:)|sort"'
) do (
set "currTest=%%A"
set "currFile=%%B:%%C"
setlocal enableDelayedExpansion
if !currTest! equ !prevTest! echo "!currFile!"
endlocal
set "prevTest=%%A"
)
Run Code Online (Sandbox Code Playgroud)
但是,通过使用FC来比较文件的内容,可以使测试更加精确.此外,您可以直接在脚本中合并DEL命令.下面的脚本打印出删除重复文件的命令.当您准备好实际删除文件时,在DEL命令之前删除ECHO.
@echo off
setlocal disableDelayedExpansion
set root="c:\test"
set "prevTest=none"
set "prevFile=none"
for /f "tokens=1-3 delims=:" %%A in (
'"(for /r "%root%" %%F in (*) do @echo %%~znxF:%%~fF:)|sort"'
) do (
set "currTest=%%A"
set "currFile=%%B:%%C"
setlocal enableDelayedExpansion
set "match="
if !currTest! equ !prevTest! fc /b "!prevFile!" "!currFile!" >nul && set match=1
if defined match (
echo del "!currFile!"
endlocal
) else (
endlocal
set "prevTest=%%A"
set "prevFile=%%B:%%C"
)
)
Run Code Online (Sandbox Code Playgroud)
这两组代码看起来都过于复杂,但这只是因为我将代码结构化为健壮并避免了可能困扰简单解决方案的问题.例如,!
如果启用了延迟扩展,文件名可能会导致FOR变量出现问题,而=
文件名导致npocmoka解决方案出现问题.
归档时间: |
|
查看次数: |
11411 次 |
最近记录: |