gpt4 book ai didi

从文件名中删除括号中文本的 Windows 批处理脚本?

转载 作者:可可西里 更新时间:2023-11-01 10:27:37 38 4
gpt4 key购买 nike

我在一个文件夹中有一堆文件,我想通过 .bat 或 .vbs 脚本(或类似脚本)复制和重命名这些文件。这些文件是这样命名的:

ABC-DE-(XXX)SomeNameHere.dat

我想复制文件并重命名它们,删除 (XXX) 部分,只留下:

ABC-DE-SomeNameHere.dat

有一种类似的问题得到了回答here但我无法修改它以适用于上述文件名模式,而且它只是重命名文件,而不是复制它们。

非常感谢任何帮助!非常感谢。


编辑在下面发布(糟糕!)代码。可能最好忽略这个 ;_;

@ECHO OFF
FOR %%F IN ("ABC-DE-(*)*.dat") DO CALL :process "%%F"
GOTO :EOF

:process
SET oldname=%1
SET "newname=%~nx1"
SET "newname=%newname:*] =%"
RENAME %oldname% "%newname%"

最佳答案

你对自己太苛刻了。您的代码比您想象的更接近。

@ECHO OFF
FOR %%F IN ("ABC-DE-(*)*.dat") DO CALL :process "%%F"
GOTO :EOF

:process
SET oldname=%1
SET "newname=%~nx1"
SET "newname=%newname:*)=ABC-DE-%"
RENAME %oldname% "%newname%"

以上可以缩短

@ECHO OFF
FOR %%F IN ("ABC-DE-(*)*.dat") DO CALL :process "%%F"
GOTO :EOF

:process
SET "name=%~nx1"
REN %1 "%name:*)=ABC-DE-%"

您可以通过使用延迟扩展来消除对 CALL 的需求

@ECHO OFF
SETLOCAL EnableDelayedExpansion
FOR %%F IN ("ABC-DE-(*)*.dat") do (
SET name=%%~nxF
REN "%%F" "!name:*)=ABC-DE-!"
)

上述延迟扩展的解决方案比使用 CALL 更有效,但是如果文件名包含 ! 则会失败,因为 %%F 扩展会被延迟扩展破坏。这可以通过在循环内打开和关闭延迟扩展来解决。

@ECHO OFF
FOR %%F IN ("ABC-DE-(*)*.dat") do (
SET oldName=%%F
SET newName=%%~nxF
SETLOCAL EnableDelayedExpansion
REN "!oldName!" "!newName:*)=ABC-DE-!"
ENDLOCAL
)

关于从文件名中删除括号中文本的 Windows 批处理脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10178524/

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