windows - 在 Windows 批处理脚本中的特殊字符的倍数之后截断文件名?

标签 windows batch-file rename

我想从数千个文件中删除第三个“_”之后的文件名部分。第三个“_”之后的结构有所不同,在某些情况下会包含“_”。第一部分的长度各不相同,所以我不能只删除前 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/

相关文章:

java - 如何在 Windows 上设置 Selenium 网格 - 作为 "service"

windows - 打开批处理文件中单个命令的回显

windows - 如何在 .bat 文件中隐藏密码?

batch-file - 使用参数从包含的批处理文件中调用函数

c - Windows XP下,用C语言 : Checking if a file is open

c# - 在 C# 中将 key 写入 Windows 注册表

windows - SendInput() 和非英文字符和键盘布局

c# - 在 Windows 10 通用应用程序中播放音频和视频?

尽管在 0777 上为源文件夹和目标文件夹设置了权限,但 PHP 函数重命名权限被拒绝

python - 如果单元格的值为 1,则将数据集中的 0-1 值与列名转换