我想从数千个文件中删除第三个“_”之后的文件名部分。第三个“_”之后的结构有所不同,在某些情况下会包含“_”。第一部分的长度各不相同,所以我不能只删除前 15 个字符。结果应该是唯一的。
文件名如下所示:
00_TEXT_=Text00._AA1234L_AA1_1.pdf
00_TEX_=Text00._AA1234L_AA1_2.pdf
00_TEXT_=TextText00._DD2023A.pdf
00_TEXT_=Text00._AA2345L_BB1_1.pdf
00_TEXT_=Text00._AA2345L_BB1_2.pdf
结果应该是这样的:
AA1234L_AA1_1.pdf
AA1234L_AA1_2.pdf
DD2023A.pdf
AA2345L_BB1_1.pdf
AA2345L_BB1_2.pdf
知道为什么这不起作用:
@echo off
setlocal enabledelayedexpansion
set deletestring=*_*_*_
for /f "delims==" %%F in ('dir /b ^| find "%deletestring%"') do (
set oldfilename=%%F
set newfilename=!oldfilename:%deletestring%=!
Ren "!oldfilename!" "!newfilename!"
)
最佳答案
我能够让它工作:
@echo off
setlocal enabledelayedexpansion
set deletestring=*_*_*_*
for /f "tokens=1,2,3,* delims=_" %%F in ('dir /b "%deletestring%"') do (
Ren "%%F_%%G_%%H_%%I" "%%I"
)
endlocal
注意 enabledelayedexpansion
在上面并不是真正需要的。
或者,您可以单行执行此操作(不需要批处理文件):
for /f "tokens=1,2,3,* delims=_" %F in ('dir /b "*_*_*_*"') do Ren "%F_%G_%H_%I" "%I"
想法是简单地用下划线将匹配的文件名分开,然后在重命名过程中重建名称(%%F_%%G_%%H_%%I
给出原始文件名时通过循环)。然后将文件重命名为第 3 个下划线后的所有内容,即 %%I
值。
关于windows - 在 Windows 批处理脚本中的特殊字符的倍数之后截断文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28898771/