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



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

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

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

使用Powershell重命名项,可以像这样完成(示例):

powershell -command "& { Get-ChildItem с:backup -filter 't1-* t2-*.txt' | Rename-Item -NewName { $_.Name -replace 't1-dd-dd','t1-00-99' } }"

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

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

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

ren "c:backupt1-??-?? t2-??-??.txt" "???00-99*"

在目标掩码中,每个?保留一个字符,文本对一个字符进行一对一替换,*保留其余字符。

有关详细信息,请参阅 Windows 重命名命令如何解释通配符?

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

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

但是你的Powershell脚本可能更容易:-)

最新更新