正如这个网站(https://ss64.com/nt/ren.html(所说,表达式?.*表示:
给我所有以一个字符作为名称的文件,以及任何 外延。
好吧,我的批处理文件代码实际上看起来像这样:
::Rename all elements following the D3 format
for %%a in (?.*) do ren "%%a" "Img_00%%a"
for %%a in (??.*) do ren "%%a" "Img_0%%a"
for %%a in (???.*) do ren "%%a" "Img_%%a"
这闻起来好像我应该能够设置审讯次数?????.* 带有变量,但我不知道如何操作,我真的不知道是否有可能,因为我是批量编码的新手。
您似乎想用前导零填充(数字?(文件名以包含三位数字,然后添加一个前缀。我会以不同的方式做到这一点:
@echo off
setlocal EnableDelayedExpansion
rem /* Loop through all matching files;
rem this filters for decimal digits: */
for /F "delims=" %%F in ('
dir /B "???.*" ^| findstr "^[0-9][0-9]*.[^.]$"
') do (
rem // Prepend file name with zeros
set "NAME=000%%~nF"
rem // Keep as many digits from the right as necessary:
ren "%%~F" "Img_!NAME:~-3!%%~xF"
)
endlocal
这需要子字符串扩展的延迟变量扩展,因为变量NAME
在同一代码块(即for
循环(中被修改。
findstr
表达式构成一个筛选器,该筛选器仅接受由十进制数字组成的文件名。如果您不希望这样做,只需删除^|
和整个findstr
命令行即可。