Пакетный файл для Windows, чтобы переименовать несколько папок, используя фиксированную часть, добавляя прогрессивный номер - PullRequest
0 голосов
/ 11 января 2019

У меня есть много папок в каталоге, которые мне нужно переименовать с фиксированным базовым именем и прогрессивным числом от 1 до бесконечности.

Путь к папкам имеет место, а базовая папка - D: \ Programmi Installati.

Пример папок для переименования:

log_1
log_2
log_04-01-2019 15-15-11,51
log_01-01-2019 8-22-14,19
log_27-12-2018 14-23-18,28
log_aaaa
log_bbbb
log_5
log_6
log_02-01-2019 6-21-17,34
log_03-01-2019 21-18-16,22

Пример имен требуемых папок:

log_1
log_2
log_3
log_4
log_5
log_6
log_7
log_8
log_9
log_10
log_11
log_12

Номера папок для переименования могут быть большими, но структура такая же.

Я попробовал больше командного файла, но все не удалось, когда есть некоторые папки с нужным именем (например, log_5 или log_1)

Порядок не важен, важно, чтобы все папки, начинающиеся с «log», были переименованы с инкурентным номером.

Код уже опробован без успеха

:: 1 code
@echo off
setlocal enabledelayedexpansion
set counter=
for /d %%a in ("D:\Programmi Installati\log_*") do (
   set /a counter+=1
   ren "%%~fa" "log_!counter!"
)
pause

:: 2 code
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "Counter=1"
for /F "delims=" %%I in ('dir "D:\Programmi Installati\log*" /AD /B /ON 2^>nul') do ren "D:\Programmi Installati\%%I" "log_!Counter!" & set /A Counter+=1
endlocal
pause

:: 3 code
@ECHO OFF
@setlocal enabledelayedexpansion

Rem | Folder Path & CD To Location
Set "Folder=D:\Programmi Installati\"
CD %Folder%

Rem | Get Raw File Name
Set "Number=1"
for /F "tokens=*" %%A in ('dir "log*" /S /b /AD') do (

    Rem | Rename Folder || Raw Name - %%~n1
    rename "%%~nA" "log_!Number!"

    Rem | Add One To Number
    set /a "number+=1"

)

Goto :EOF
PAUSE

Код работает, только если в каталоге нет нужного имени каталога, иначе не переименовывайте папки.

1 Ответ

0 голосов
/ 11 января 2019

Эта партия работает по-другому, это

  • пропускает папки с правильной схемой именования (чтобы они сохраняли номер)
  • увеличивает счетчик и заполняет возможные пробелы

:: Q:\Test\2019\01\11\SO_54149437.cmd
@Echo off
Pushd "D:\Programmi Installati\" || (Echo couldn't change dir&pause&goto :eof)
set Cnt=0
for /f "delims=" %%A in (
  'dir /B /AD log_* ^| findstr /iV "^log_[0-9][0-9]*$" '
) Do Call :RenInc "%%A"
PopD    
Goto :Eof

:RenInc
Set /A Cnt+=1
if Exist "log_%Cnt%" goto :RenInc
Ren "%~1" "log_%Cnt%"

Результирующие имена (всего одиннадцать, а не двенадцать)

log_1
log_10
log_11
log_2
log_3
log_4
log_5
log_6
log_7
log_8
log_9
...