与标题一样,我想批量重命名文件,但保留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
答案 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.part2
和B
,并将此部分分配给循环变量.part*
。对于内部 FOR ,文件扩展名是最后一个点之后的所有内容,即.rar
。对于内部 FOR 循环处理文件名字符串,文件的实际文件扩展名.part*
是未知的。
命令 REN 将当前文件引用为新文件名的完整路径,并保留%%~B
从内部 FOR 循环引用的.rar
来自外部 FOR 循环的原始文件扩展名dir /?
。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
echo /?
endlocal /?
for /?
pause /?
ren /?
setlocal /?