2016-11-14 5 views
1

Я хочу написать пакетный скрипт, чтобы перебрать набор файлов с нулевой площадкой на них. У меня возникают проблемы с использованием набора, поскольку он, кажется, использует последнее число в моей итерации как значение, которое должно использоваться. Вот что у меня есть:Окно пакетной папки Windows с заполнением

@echo off 
for /L %%r in (1,1,%1) do (
echo %%r 
set "var=00%%r" 
echo %var% 
) 

При выполнении этого с входом 5 я получаю это как выход:

1 
005 
2 
005 
3 
005 
4 
005 
5 
005 

Я хотел бы, чтобы это было:

1 
001 
2 
002 
3 
003 
4 
004 
5 
005 

Любой помощь в этом будет замечательной. Благодарю.

ответ

2

Вы действительно должны прочитать по теме замедленное расширение. Вары в (блок кода) оцениваются только один раз, когда cmd.exe анализирует содержимое. Откуда стоит этот 1 доллар? Должно ли оно быть% 1? Если вы хотите иметь фиксированное число с ведущими нулями, вы должны помнить, что «Set/A» обрабатывает числа с ведущими нулями в виде восьмеричных чисел. Это работа вокруг

@echo off 
Setlocal EnableDelayedExpansion 
for /L %%r in (1,1,5) do (
    Set /A var=1000+%%r 
    Call echo Pseudo Call %%var:~-3%% %%r 
    echo Delayed expansion with exclamation mark !var:~-3! %%r 
) 

Вы видите 2 различные методы, чтобы получить фактическое значение var

Pseudo Call 001 1 
Delayed expansion with exclamation mark 001 1 
Pseudo Call 002 2 
Delayed expansion with exclamation mark 002 2 
Pseudo Call 003 3 
Delayed expansion with exclamation mark 003 3 
Pseudo Call 004 4 
Delayed expansion with exclamation mark 004 4 
Pseudo Call 005 5 
Delayed expansion with exclamation mark 005 5 
+0

Я был толстый потрогал за $ 1 , Это должно быть% 1. Спасибо, это отлично работает. –

1

Вы должны написать это так:

@echo off 
setlocal enableDelayedExpansion 
for /L %%r in (1,1,5) do (
    echo %%r 
    set "var=00%%r" 
    echo !var! 
) 
pause 

 Смежные вопросы

  • Нет связанных вопросов^_^