Windows bat文件重命名文件

1yjd4xko  于 2023-05-08  发布在  Windows
关注(0)|答案(1)|浏览(240)

我想一个Windows批处理文件,将重命名子目录中发现的所有文件。
原始文件名的示例是Clarity.Always.2015.this.WEB.P10.pdf
我希望结果是:
1.将除文件/扩展名点以外的所有点替换为空格。
1.删除前4位数字(年)之后的所有字符。
1.将年份括在括号内。
因此,我希望生成的文件名为Clarity Always (2015).pdf
我已经尝试修改我在这里看到的几个例子,但都没有用,包括以下的变体:

for /f "tokens=1,2,* delims=." %%F in ('dir /b "*.*"') do ren "%%F.%%G" "file %%F name.%%G"
for /f "delims=*" %a in ('dir File*_EN.txt /b /s') do ren "%a" File*_ENU.pdf
7cjasjjr

7cjasjjr1#

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
rem The following settings for the source directory and filename are names
rem that I use for testing and deliberately include names which include spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.

SET "sourcedir=u:\your files"

FOR /f "delims=" %%e IN (
 'dir /b /s /a-d "%sourcedir%\*" '
 ) DO (
 SET "fullfilename=%%e"
 SET "filename=%%~ne"
 SET "fileext=%%~xe"
 CALL :findnewname
)

GOTO :EOF

:findnewname
FOR /L %%y IN (1980,1,2025) DO (
 IF "%filename%" neq "!filename:.%%y.=!" SET "newname=!filename:.%%y.=.:%%y:!"&FOR /f "tokens=1,2delims=:" %%b IN ("!newname:.= !") DO ECHO REN "%fullfilename%" "%%b(%%c)%fileext%"

)

GOTO :EOF

在用户变量中保存文件名和扩展名。
测试字符串.year.是否出现在名称中。如果是这样,用.:year:替换.year.(冒号不能出现在文件名中),然后标记结果字符串,利用这个机会用空格替换.,把碎片捡起来,把它们粘在一起,重新命名(只要被echo ed就可以解除)
[修订为扫描子目录]

相关问题