Случайная переменная, не изменяющаяся в цикле "для" в пакетном файле Windows

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

@echo off


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

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

)   


echo Complete

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

Ответ 1

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

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

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

Здесь ваш script изменен так, чтобы использовать отложенное расширение:

@echo off

setlocal EnableDelayedExpansion

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

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

)

endlocal

echo Complete

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

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

Ответ 2

в моей системе мне нужно написать

set checker=Random

вместо

set checker=!Random!