批处理文件替换/重命名

时间:2011-07-20 16:51:21

标签: batch-file

我希望用批处理文件重命名目录中的一堆文件。我想这样做:

file_XX_img.tiff到file_32_img.tiff

我有这段代码

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set fName=%1
if '%1' equ '' set /p fName=Enter file name:


for /f "delims==" %%F in ('dir /b *.aaa') do ren "%%~nxF" "%%~nF"

pause

重命名扩展程序,但我想转换它,所以我可以用数字替换XX。如何修改它以适应这种情况?

---------------------------------- EDIT ------------ ---------------------------------

想通了:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set fName=%1
set /p vers=Enter Vers:
for /f "delims==" %%F in ('dir /b file_XX*.*') do ren "%%~nxF" "file_%vers%*.*"
pause

1 个答案:

答案 0 :(得分:2)

您的解决方案存在一些问题。

  1. %1参数存储在fname变量中,但实际上从未使用过。

  2. 重命名这样的文件只能按预期的vers的2位数值工作。如果是1位数,则结果如file_3X_img.tif。如果它超过2位数,你会有这样的东西(4位数):file_3210mg.tif

  3. 我猜你的解决方案可能仍然适合你一段时间(也许,直到你达到100)。不过,您可能需要考虑以下替代方案:

    @ECHO OFF
    SET "vers=%~1"
    IF "%vers%" == "" SET /P "vers=Enter Vers: "
    FOR %%F IN (file_XX_*.*) DO CALL :process "%%F"
    GOTO :EOF
    
    :process
    SET "name=%~nx1"
    SETLOCAL ENABLEDELAYEDEXPANSION
    SET "name=!name:_XX_=_%vers%_!"
    RENAME %1 "%name%"
    ENDLOCAL