2

Для целей архивирования у меня есть один каталог, полный файлов с note_1.txt , note_3.txt , note_4.txt и т.д. Я пишу сценарий, чтобы найти наибольшее число N среди этих файлов, и переименовать новый файл note.txt в note_N+1.txt .

Я использую пакет для цикла в первый раз и не могу заставить его работать должным образом. Я попытался заменить % на ! но я не уверен, что понимаю, как это работает.

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 ответ1

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

Дополнительные ресурсы

  • 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
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .