Как дополнить числа нулями в пакетном цикле FOR?

Как дополнить числа нулями в пакетном цикле FOR?

Я пишу пакетный файл для выполнения некоторых операций на удаленных компьютерах в моем здании. Они все названы с одинаковым префиксом, но номер в конце меняется (01–65). Я попытался следовать онлайн-руководству по созданию цикла пакетного файла на основе чисел и пришел к следующему:

FOR /l %%N in (1,1,65) do (
    set HOSTNAMETOUSE=prefix-%%N
    ECHO %HOSTNAMETOUSE%
)

Это отлично работает после того, как он достигает 10, так как тогда это две цифры. Мне нужно, чтобы числа 1-9отображались как 01-09, так как это соответствует нашей схеме именования. По сути, мне нужна одна цифра начального нуля для первых 9 итераций.Как это сделать с помощью пакетных файлов Windows?

решение1

Ваш опубликованный код не может работать, поскольку %HOSTNAMETOUSE%он расширяется при разборе оператора, а весь заключенный в скобки блок разбирается за один проход, до выполнения цикла. Таким образом, расширенное значение является постоянным для всех итераций.

Для получения значения во время выполнения необходимо использовать отложенное расширение.

@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
    set HOSTNAMETOUSE=prefix-%%N
    ECHO !HOSTNAMETOUSE!
)

Теперь при необходимости добавляем префикс 0.

Поскольку вам никогда не понадобится больше одного нуля, вы можете использовать оператор IF.

@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
    if %%N lss 10 (set HOSTNAMETOUSE=prefix-0%%N) else set HOSTNAMETOUSE=prefix-%%N
    ECHO !HOSTNAMETOUSE!
)

Но это не удобно, если ширина вашего номера больше 2 цифр. Более общее решение — добавить строкуннули нужной вам длины, а затем используйте операцию подстроки, чтобы сохранитьнсамые правые цифры.

@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
    set "n=00%%N"
    set "HOSTNAMETOUSE=!n:~-2!
    ECHO !HOSTNAMETOUSE!
)

Вы можете легко расширить это решение практически до любого количества начальных нулей.

решение2

Я бы сделал это так:

  • Добавьте «0» к каждому числу (то есть «01», но также и «065»).
  • Подстрока последних 2 символов из этой строки

Как сделать подстроку в пакетном файле (2 последних символа):

SET string=abcd 
echo %string% 
SET string2=%string:~-2%
echo %string2%

решение3

Ничего нового в ответе @dbenham, просто создал несколько переменных значений, собранных из командной строки, и разместил здесь для удобства копирования и вставки — все заслуги принадлежат @dbenham выше:

set first=%1
set last=%2
set len=%3
setlocal EnableDelayedExpansion
FOR /l %%N in (%first%, 1, %last%) do (
    set "n=0000000000000%%N"
    set "padded=!n:~-%len%!
    echo !padded!
)

решение4

С использованиемZtreeWin, перейдите в нужный каталог, нажав \, затем нажмите Enter, чтобы войти в каталог, в котором вы можете CtrlTпометить файлы, которые вы хотите переименовать, а затем CtrlRпереименовать их в????<0>*.*

Например:

foo-0-bar.jpg -> foo-00-bar.jpg
foo-1-bar.jpg -> foo-01-bar.jpg
foo-2-bar.jpg -> foo-02-bar.jpg
...

В приведенном выше примере ????представляет первые 4 символа (foo-), <0>вставляет ноль на пятую позицию и *.*представляет оставшуюся часть имени файла (-bar.jpg), которая останется неизменной.

Пометка ваших файлов:

введите описание изображения здесь

Переименование файлов:

введите описание изображения здесь

ZTreeWin— мощный 32- и 64-битный текстовый файловый и каталоговый менеджер, созданный по образцу легендарного XTreeGold(tm), но усовершенствованный для современных популярных операционных систем.

Связанный контент