Случайная переменная не изменяется в цикле for в пакетном файле Windows - PullRequest
12 голосов
/ 28 июня 2011

Я пытаюсь распечатать случайное число несколько раз, но в цикле for, который я использую, переменная не сбрасывается.Вот мой код.

@echo off


for %%i in (*.txt) do (

set checker=%Random%
echo %checker%
echo %%i% >> backupF 

)   


echo Complete

Есть 5 текстовых файлов, поэтому я хочу, чтобы он печатал 5 разных случайных чисел, но он просто печатал одно и то же случайное число 5 раз.Любая помощь будет принята с благодарностью.Спасибо!

Ответы [ 2 ]

16 голосов
/ 28 июня 2011

Я не уверен, как вы смогли напечатать хотя бы одно случайное число.В вашем случае %checker% должно вычисляться как пустая строка, если вы не запускаете скрипт более одного раза из одного сеанса cmd.

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

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

Вот ваш скрипт, модифицированный для использования отложенного расширения:

@echo off

setlocal EnableDelayedExpansion

for %%i in (*.txt) do (

set checker=!Random!
echo !checker!
echo %%i% >> backupF

)

endlocal

echo Complete

Как видите, setlocal EnableDelayedExpansionвключает специальную обработку для синтаксиса с отложенным расширением, который составляет ! s вокруг имен переменных вместо % s.

Вы все еще можете использовать немедленное расширение (используя %), где оно может работать правильно (в основном, за пределами командных блоков в квадратных скобках).

0 голосов
/ 13 января 2015

в моей системе я должен написать

set checker=Random

вместо

set checker=!Random!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...