Попытка переименовать файлы в зависимости от размера файла - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь переименовать некоторые файлы MP4 в зависимости от размера файла mp4 в другом каталоге.Я хочу назвать все файлы одинакового размера с одинаковым именем.Это означает, что если размер файла исходного файла совпадает с размером файла в каталоге сравнения, исходный файл переименовывается в любое имя для сравниваемого файла.Поскольку оба каталога необходимо читать рекурсивно, я думаю, что было бы проще составить список для сравнения с информацией в нем в 2 столбцах с помощью команды DIR / s / b echo %% ~ zs >> filesizelist.txt, которая даетмне список типа

123456789 movie.mp4

987654321 movie2.mp4

Затем передайте все исходные mp4s в пакетный файл и, если %% ~ za совпадет со значением в первомЗатем в столбце выберите файл с соответствующим именем файла.Это лучший путь?Я пытался сделать так, чтобы он работал «на лету», и это было одновременно и причиной моей 3-дневной головной боли (плюс список ссылок редко меняется и, очевидно, легко обновляется).Может кто-нибудь помочь мне с сценарием?

1 Ответ

0 голосов
/ 17 декабря 2018

Я провожу некоторый тест с моим mp4, и код работает, и для того, чтобы вы выполнили свой тест, вам нужно изменить / поставить эту строку на 2 выше с указанием пути к вашей папке / каталогу (один сохранить, а другой -сравнить), заменив в строке код следующим образом:

`set "_target_to_keeped=C:\Users\ecker\Videos\Target"`
`set "_target_to_rename=C:\Users\ecker\Videos\Ren_it"`

Вам необходимо добавить папку, в которой хранятся файлы, и файлы для переименования (если размер + имя совпадают) в тех же строках, где находятся 2код строк в этом тесте (извините, не объясните на хорошем английском, мой английский мне не поможет).Уже поздно 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_:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...