Я только что добавил !
переменным в цикле 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
Дополнительные ресурсы
EnableDelayedExpansion
Задержка расширения приведет к тому, что переменные в пакетном файле будут расширяться во время выполнения, а не во время анализа, эта опция включается командой SETLOCAL EnableDelayedExpansion.
Когда действует отложенное расширение, переменные могут быть немедленно прочитаны с помощью!variable_name! вы также можете читать и использовать% variable_name%, которое покажет начальное значение (развернуто в начале строки).
За
Переменные замены (FOR /?)
Кроме того, была улучшена замена ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path namey