![循环和 if 语句的批处理脚本无法正确交互](https://linux22.com/image/1570175/%E5%BE%AA%E7%8E%AF%E5%92%8C%20if%20%E8%AF%AD%E5%8F%A5%E7%9A%84%E6%89%B9%E5%A4%84%E7%90%86%E8%84%9A%E6%9C%AC%E6%97%A0%E6%B3%95%E6%AD%A3%E7%A1%AE%E4%BA%A4%E4%BA%92.png)
为了存档目的,我有一个目录,里面充满了名为、、等的文件note_1.txt
。note_3.txt
我正在编写一个脚本来找出这些文件当中的note_4.txt
最大数字,并将新文件重命名为。N
note.txt
note_N+1.txt
我第一次使用批量 for 循环,无法使其正常工作。我尝试用 替换,%
但!
我不确定我理解它的工作原理。
SETLOCAL ENABLEDELAYEDEXPANSION
SET "maxfile=1"
for /f %%i in ('dir /b note_*.txt') do (
SET archivename=%%~ni
SET archivenumber=%archivename:~5%
if %archivenumber% GTR %maxfile% SET /a maxfile=%archivenumber%+1
)
echo %maxfile%
ENDLOCAL
答案1
我只是将其添加到循环!
内的变量中FOR
,以确保它们在循环执行时全部扩展,以确保相应地读取新的设定值,以帮助!maxfile!
根据每次循环迭代获取最终值。
此外,我CD /D "%%~F0"
在循环开始上方的行中添加了FOR
,以确保目录更改为脚本所在的目录,因为您没有在命令示例中明确指定目录,但我也在下面添加了一个明确的示例脚本。
批处理脚本(隐式)
SETLOCAL ENABLEDELAYEDEXPANSION
SET "maxfile=1"
cd /d "%%~F0"
for /f %%i in ('dir /b note_*.txt') do (
SET "archivename=%%~ni"
SET "archivenumber=!archivename:~5!"
if !archivenumber! GTR !maxfile! SET /a maxfile=!archivenumber!+1
)
echo !maxfile!
ENDLOCAL
批处理脚本(显式)
SETLOCAL ENABLEDELAYEDEXPANSION
SET "maxfile=1"
SET "srcdir=C:\Folder\Path"
for /f %%i in ('dir /b "%srcdir%\note_*.txt"') do (
SET "archivename=%%~ni"
SET "archivenumber=!archivename:~5!"
if !archivenumber! GTR !maxfile! SET /a maxfile=!archivenumber!+1
)
echo !maxfile!
ENDLOCAL
更多资源
-
延迟扩展将导致批处理文件中的变量在执行时而不是在解析时扩展,此选项通过 SETLOCAL EnableDelayedExpansion 命令打开。
当延迟扩展生效时,可以使用 !variable_name! 立即读取变量,您还可以读取和使用将显示初始值(在行首扩展)的 %variable_name%。
-
变量替换(FOR /?)
此外,FOR 变量引用的替换功能也得到了增强。现在您可以使用以下可选语法:
%~I - expands %I removing any surrounding quotes (") %~fI - expands %I to a fully qualified path namey