переименовать все файлы последовательно с тем же расширением, используя командный файл - PullRequest
1 голос
/ 23 апреля 2020

Я хочу переименовать эти файлы так:

File 1.pdf  > 1.pdf
File 2.pdf  > 2.pdf
..
File 10.pdf >10.pdf
File 11.pdf >11.pdf
File1 1.pdf >12.pdf      
File1 2.pdf >13.pdf
..

Этот код работает, но не сортирует их:

    @echo off & setlocal EnableDelayedExpansion 

set a=1
for /f "delims=" %%i in ('dir /b *.pdf') do (
  ren "%%i" "!a!.pdf" 
  set /a a+=1
) 

Результат:

File 1.pdf  > 1.pdf
File 10.pdf > 2.pdf
File 11.pdf > 3.pdf

Ответы [ 2 ]

1 голос
/ 23 апреля 2020
@echo off
setlocal enabledelayedexpansion

if "%~1" == "stage1" goto :stage1
if "%~1" == "stage2" goto :stage2
if not "%~1" == "" exit /b 1

cmd /c "%~f0" stage1 | sort | cmd /c "%~f0" stage2
exit /b 0

:stage1
for /f "delims=" %%A in ('dir /b *.pdf') do (
    for /f "tokens=1,*" %%B in ("%%~nA") do (
        set "token1=%%~B                             "
        set "token2=                             %%~C"
        echo "!token1:~0,20!"^|"!token2:~-20!"^|"%%~A"
    )
)
exit /b 0

:stage2
set i=0
for /f "delims=" %%A in ('more') do (
    set /a "i+=1"
    for /f "tokens=3 delims=|" %%B in ("%%~A") do (
        echo ren "%%~B" "!i!.pdf"
    )
)
exit /b 0

Метка stage1 дополняет 2 токена имени файла пробелами, а затем обрезает каждый до 20 символов в длину. Каждая строка выводится с помощью "token1 padded"|"token2 padded"|"full filename", который передается на sort, а затем передается на метку stage2 для индексации и переименования.

Удалите эхо перед командой ren, если test - хорошо.

Вывод:

ren "File 1.pdf" "1.pdf"
ren "File 2.pdf" "2.pdf"
ren "File 10.pdf" "3.pdf"
ren "File 11.pdf" "4.pdf"
ren "File1 1.pdf" "5.pdf"
ren "File1 2.pdf" "6.pdf"
0 голосов
/ 23 апреля 2020

Вы можете проверить a, чтобы увидеть, если оно меньше 10, и добавить ноль к имени файла, например:

if !a! LSS 10 ren "%%i" "0!a!.pdf" else ren "%%i" "!a!.pdf"

Если у вас есть более 100 файлов для переименования, вы можете сделать это вот так:

if !a! LSS 10 set newfile="00!a!" else if !a! LSS 100 set newfile="0!a!"

ren "%%i" "!newfile!.pdf"

Соедини все это, у меня получилось:

@echo off & setlocal EnableDelayedExpansion 

set a=1
for /f "delims=" %%i in ('dir /b *.pdf') do (
  set newfile="!a!"
  if !a! LSS 1000 set newfile="0!a!"
  if !a! LSS 100 set newfile="00!a!"
  if !a! LSS 10 set newfile="000!a!"

  ren "%%i" "!newfile!.pdf"
  set /a a+=1
)
...