Ответ 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.
Вы все еще можете использовать немедленное расширение (используя %
), где он может работать правильно (в основном, вне блоков команд в квадратных скобках).