我试图根据另一个目录中mp4文件的文件大小来重命名一些MP4文件。我想将所有具有相同大小的文件命名为相同的名称。这意味着,如果源文件的文件大小与比较目录中文件的大小匹配,则源文件将重命名为所比较文件的名称。因为这两个目录都需要递归读取,所以我想通过使用DIR / s / b echo %%〜zs >> filesizelist.txt命令,可以更轻松地在两列中创建一个列表以与其中的信息进行比较我的清单像
123456789 movie.mp4
987654321 movie2.mp4
然后将所有源mp4传递到批处理文件,如果%%〜za与第一列中的值匹配,则将该文件转换为相应的文件名。这是最好的路径吗?我试图编写脚本使其运行中,这既不可行,也是我三天头痛的根源(加上参考列表很少更改,显然很容易更新)。有人可以帮我编写脚本吗?
我使用mp4进行了一些测试,并且代码可以正常工作,并且在您执行测试时,您需要更改/在上面的这2行以及文件夹/目录的路径(一个要保留,另一个要比较),通过替换行代码是这样的:
`set "_target_to_keeped=C:\Users\ecker\Videos\Target"`
`set "_target_to_rename=C:\Users\ecker\Videos\Ren_it"`
您需要在此测试的两行代码的同一行中添加要保留文件和重命名文件的文件夹(如果大小+名称匹配)(对不起,英语讲得不好,我的英语对我没有帮助)。到现在,已经是01:53了,我需要睡觉...是的!所以,有不错的代码!
@echo off && setlocal enableextensions enabledelayedexpansion
cd /d "%~dp0"
set /a _cnt_in_looping= 1 - 1
set /a _cnt_files_size= 1 - 1
set "_target_to_keeped=C:\Users\ecker\Videos\Target"
set "_target_to_rename=C:\Users\ecker\Videos\Ren_it"
cd /d "!_target_to_keeped!"
for /f "tokens=* delims=^ " %%i in ('^<nul dir /o-d /on /b "*.mp4" 2^> nul ^| find "" /v /c') do set _cnt_in_looping=%%i
for /f "tokens=* delims=^ " %%i in ('^<nul dir /o-d /on /b "*.mp4"') do (
set "_file_now_keep=%%i"
set "_file_now_keeped=%%~zi %%i"
call :_to_compare_:
)
set /a _total_files_renamed=!_cnt_in_looping! - !_cnt_files_size!
set /a _total_files_n_chang=!_total_files_renamed! - !_cnt_in_looping! * -1
echo/Total of files renamed = !_total_files_renamed!
echo/Total of files n chang = !_total_files_n_chang!
endlocal
goto :_end_of_file_:
:_to_compare_:
if not exist "!_file_now_keep!" exit /b
for /f "tokens=*" %%I in ('^<nul dir /o-d /on /b "!_file_now_keep!"') do (
set "_file_now_compare=%%~zI %%I"
set "_path_now_compare=%%~dpI"
if "!_file_now_compare!" == "!_file_now_keeped!" (
rename "!_path_now_compare!\%%I" "%%~zI %%I"
echo/ rename "%%~I" "%%~zI %%I"
if ["!errorlevel!"]==["0"] call set /a _cnt_files_size=!_cnt_files_size! + 1
timeout /t 10
)
)
exit /b
:_end_of_file_:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句