批量重命名文件,同时保留部分rar编号

时间:2018-05-23 15:31:33

标签: batch-file rename

与标题一样,我想批量重命名文件,但保留rar文件的一部分。

示例:

  • 文件-01.part1.rar
  • 文件-01.part2.rar

输出:

  • Newfile__01.part1.rar
  • Newfile__01.part2.rar

以下是代码的重命名部分。

SETLOCAL EnableDelayedExpansion

REM Set your Year, Month, Day variable values here.
REM They will be used for file renaming.

CD "D:\test\rename"

FOR /F "usebackq tokens=* delims=" %%A IN (`DIR "*.rar" /B /A:-D`) DO (
    REM Extract the last 2 chars of the file name.
    SET FileName=%%~nA
    SET First4=!FileName:~0,5!
    SET Last2=!FileName:~-2!

    REM Rename the file, inserting the new data.
    RENAME "%%A" "!First4!__!Last2!%%~xA"
)
ENDLOCAL

2 个答案:

答案 0 :(得分:1)

以下是基于我对您想要做的事情的假设的示例脚本:

@Echo Off
SetLocal EnableDelayedExpansion

Set "sd=D:\test\rename"
Set "xf=.rar"

If Not Exist "%sd%\*%xf%" Exit /B
CD /D "%sd%" 2>Nul || Exit /B

Set "ds="
For /F "Tokens=1-3 Delims=/ " %%A In ('RoboCopy/NJH /L "\|" Null'
) Do If Not Defined ds Set "ds=%%A%%B%%C"

For %%A In ("*%xf%") Do (Set "fn=%%~nA"
    For %%B In ("!fn!") Do (Set "fx=%%~xB"
        If /I Not "!fx:.part=!"=="%%~xB" Set "fn=%%~nB")
    Ren "%%A" "!fn:~,4!_%ds%_!fn:~-2!!fx!%xf%$")
Ren "*%xf%$" "*%xf%"

我在两个下划线之间插入了年,月,日变量%ds%,意思是:

  • File-01.part1.rar将重命名为File_20180523_01.part1.rar
  • Testing18.part2.rar将重命名为Test_20180523_18.part2.rar
  • Archive02.rar将重命名为Arch_20180523_02.rar

答案 1 :(得分:0)

在第三行修改文件夹路径后尝试此批处理文件:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "Folder=D:\test\rename"

for /F "eol=| delims=" %%A in ('dir "%Folder%\File-01.part*.rar" /A-D-H /B /ON 2^>nul') do (
    for /F "eol=| delims=" %%B in ("%%~nA") do ECHO ren "%Folder%\%%A" "Newfile__01%%~xB%%~xA"
)

endlocal
pause

注意:第6行使用命令 ECHO 来演示重命名命令行。按原样运行批处理文件以进行验证。如果一切正常,请删除 ECHO 并再次运行批处理文件以真正重命名文件。

此批处理文件运行 FOR ,它在后台启动的单独命令进程中运行命令 DIR ,并cmd.exe /C输出

  • 由于/B
  • 而只是裸格式的名称 由于/A-D-H(属性不是目录而非隐藏),只有非隐藏文件的
  • /ON
  • 而按名称排序
  • 在指定文件夹中匹配通配符模式File-01.part*.rar

另请阅读有关Using Command Redirection Operators的Microsoft文章,了解2>nul的说明。重定向运算符>必须使用 FOR 命令行上的插入符^进行转义,以便在执行命令之前Windows命令解释程序处理此命令行时将其解释为文字字符FOR ,它在后台启动的单独命令进程中执行嵌入式dir命令行。 2>nul将错误消息输出重定向到与句柄 STDERR 和设备 NUL 的条件匹配的文件,以禁止它。

FOR 捕获已启动命令进程的输出并逐行处理,忽略空行。

默认的行尾字符;使用eol=|从分号修改为竖线。 FOR 默认忽略以分号开头的行。文件名可以以分号开头。但文件名不能包含竖线。

FOR 默认情况下会在空格/制表符上拆分一行,并将第一部分分配给指定的循环变量A。行分割行为由delims=禁用,File-01.part1指定一个空的分隔符列表,导致获取文件扩展名但没有文件路径作为 DIR 分配给循环变量的输出。 / p>

内部 FOR 循环作为字符串处理文件名而没有文件扩展名。这是从第一个字符到最后一个点之前的字符的字符串,即File-01.part2B,并将此部分分配给循环变量.part*。对于内部 FOR ,文件扩展名是最后一个点之后的所有内容,即.rar。对于内部 FOR 循环处理文件名字符串,文件的实际文件扩展名.part*是未知的。

命令 REN 将当前文件引用为新文件名的完整路径,并保留%%~B从内部 FOR 循环引用的.rar来自外部 FOR 循环的原始文件扩展名dir /?

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

  • echo /?
  • endlocal /?
  • for /?
  • pause /?
  • ren /?
  • setlocal /?
  • {{1}}