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

时间:2014-01-13 21:19:07

标签: 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' } }"

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

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

1 个答案:

答案 0 :(得分:3)

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

ren "c:\backup\t1-??-?? t2-??-??.txt" "???00-99*"

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

有关详细信息,请参阅How does the Windows RENAME command interpret wildcards?

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

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脚本可能更容易: - )