我运行一个小的批处理文件来重命名一些txt文件:
“C:\ backup \ t1-dd-dd t2-dd-dd.txt”
是一个数字(从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命令?
答案 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脚本可能更容易: - )