Windows批处理文件,使用固定部分重命名多个文件夹,并添加累进编号

时间:2019-01-11 15:26:50

标签: loops batch-file directory rename

我在目录中有很多文件夹,需要使用固定的基本名称和从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 :(得分:1)

该批次的工作方式有所不同

  • 使用正确的命名方案跳过文件夹(以便保留编号)
  • 增加计数器并填补可能的空白

:: 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%"

结果名称(只有11个,而不是12个)

log_1
log_10
log_11
log_2
log_3
log_4
log_5
log_6
log_7
log_8
log_9