在Windows批处理中使用计数器重命名文件名

时间:2017-07-12 09:18:12

标签: batch-file

我想将文件从1-example.txt更改为200-example.txt(只需更改起始编号),代码如下:

@Echo off

setlocal ENABLEDELAYEDEXPANSION
SET /a counter=200

for /F %%i in ('dir /b/a-d *.txt') do ( 
    for /F "usebackq tokens=1,* delims=-" %%c in ('%%i') do (
        SET filename=%%i
        :: Dunno how to fix
        echo !filename:%%c=%counter%!
        :: ren %%i %%newfilename
    )
    SET /a counter+=1
)

但它不起作用,它始终显示 200 。当我将%counter%更改为!counter! 它没有显示任何内容。如何修理柜台?

1 个答案:

答案 0 :(得分:3)

您可以使用此代码:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "Counter=200"
for /F %%I in ('dir /A-D /B *-*.txt 2^>nul') do (
    for /F "tokens=1* delims=-" %%A in ("%%~nxI") do set "NewFileName=!Counter!-%%B"
    ren "%%~fI" "!NewFileName!"
    set /A Counter+=1
)
endlocal

由于使用%%~nxI,只有带有文件扩展名的文件名由内部 FOR 循环处理为字符串。

第一个短划线字符的剩余部分被分配给循环变量A,由于是旧数字而不感兴趣。

第一个破折号的所有权利都分配给循环变量B,用于构建具有当前计数器值的新文件名。新文件名必须没有路径。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • for /?
  • ren /?
  • set /?
  • setlocal /?