cmd:替换文件名的内部部分(使用正则表达式掩码)

esc*_*380 2 regex windows powershell cmd file-rename

我运行一个小的批处理文件来重命名一些 txt 文件:
“C:\backup\t1-dd-dd t2-dd-dd.txt”

在文件名中d - 是一个数字(从 0 到 9);
注意:文件名中 t1 和 t2 标记之间有空格(我出于某种原因需要它)。

现在,我只需要替换文件名的“t1-dd-dd”部分中的数字。

使用 powershell Rename-Item 可以这样做(示例):

powershell -command "& { Get-ChildItem ?:\backup -filter 't1-* t2-*.txt' | Rename-Item -NewName { $_.Name -replace 't1-\d\d-\d\d','t1-00-99' } }"
Run Code Online (Sandbox Code Playgroud)

结果将是这样的:
C:\backup\t1-14-26 t2-56-48.txt(旧文件名)
C:\backup\t1-00-99 t2-56-48.txt(新文件名)

是否可以在没有 powershell 的情况下做同样的事情,只使用 cmd RENAME 命令?

dbe*_*ham 6

你不能用正则表达式来做,但你可以用 RENAME 通配符来做。

ren "c:\backup\t1-??-?? t2-??-??.txt" "???00-99*"
Run Code Online (Sandbox Code Playgroud)

在目标掩码内,每个?保留一个字符,文字进行一换一字符替换,*保留剩余部分。

请参阅Windows RENAME 命令如何解释通配符?了解更多信息。

如果您担心源掩码不够具体,那么您可以使用以下批处理脚本来保证仅重命名正确命名的文件。

pushd "c:\backup"
for /f "delims=" %%F in (
  'dir /b /a-d "t1-??-?? t2-??-??.txt" ^| findstr /xirc:"t1-[0-9][0-9]-[0-9][0-9] t2-[0-9][0-9]-[0-9][0-9].txt"'
) do ren "%%F" "???00-99*"
popd
Run Code Online (Sandbox Code Playgroud)

但是您的 powershell 脚本可能更容易 :-)