gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:58:49 28 4
gpt4 key购买 nike

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com