Показать полную графическую версию : [решено] Случайное значение переменной в цикле
patrickfox
15-04-2020, 15:31
Доброе время суток дорогие форумчане!
Возникла проблема с выводом значения переменной из заданного диапазона, когда пингую определенный ip, переменная R10 не генерируется по указанным правилам (ниже приведен код, буду благодарен если подскажете что поменять):
@echo off
setlocal enableextensions enabledelayedexpansion
set min=1
set max=20
For /L %%i In (1,1,10) Do (
echo Attempt %%i %
call :gen %
ping -n %r10% 127.0.0.1 > nul
)
pause
:gen
set /a r10=%random%%%(%max%-%min%+1)+%min%
exit /b
patrickfox
15-04-2020, 17:41
Iska, так удивительно просто оказалось?) Спасибо, работает! А есть ли информация по этим спец символам где-либо? Так в следующий раз и не соображу какие в какой ситуации применять "%" или "!".
Скажем так: всё упирается в понятие «оператор»/«инструкция»/«команда» и тот факт, что переменные окружения в %…% раскрываются в момент его исполнения. То есть, %r10% раскрывается однократно в момент начала исполнения конструкции For /L %%i In (1,1,10) Do (…). И, поскольку в этот момент переменной окружения r10 ещё не существует — получается пустое место.
Чтобы переменная окружения раскрывалась тогда, когда происходит исполнение команды ping -n %r10% 127.0.0.1 > nul, требуется задание отложенного раскрытия переменных окружения (setlocal enabledelayedexpansion) и использования символов !…! вместо %…%.
megaloman
15-04-2020, 20:56
@Echo Off
cls
set /A min=1, max=20
For /L %%i In (1,1,10) Do (
call :gen
call echo Attempt %%i n=%%r10%%
Call ping -n %%r10%% 127.0.0.1 >nul
)
pause
Exit /B
:gen
set /a r10=min+(max-min+1)*%random%/32768
exit /b@Echo Off
cls
set /A min=1, max=20
For /L %%i In (1,1,10) Do call :gen %%i
pause
Exit /B
:gen
set /a r10=min+(max-min+1)*%random%/32768
echo Attempt %1 n=%r10%
ping -n %r10% 127.0.0.1 >nul
exit /b
patrickfox
15-04-2020, 23:09
megaloman, благодарю за предоставление иных подходов!)
Iska, Прошу прощения за оффтоп, в следующий раз уже создам новую тему, но думаю вопрос тоже не будет сильно сложным для понимающих, одним из решений уже обзавелся, если можете подсказать иной способ или дополнить имеющийся буду вновь признателен.
Имеется батник, внутри него прописана команда на создание другого батника (или текстового документа, содержащего команды, которые могут быть исполнены в случае изменения расширения с .txt на .bat), проблема заключается в том, что при простом экранировании символов, читаемость чресчур снижается, и хотелось бы узнать, есть ли способ более изящный? В качестве примера, на просторах интернета нашёл одно решение, но его проблема в том, что после текста, который собираемся скопировать в новый файл, уже не пропишешь новых команд (или я не знаю как их прописать). А после этого текста будут ещё команды, которые не должны быть скопированы. Например два таких скрипта идущих подряд. Надеюсь вы понимаете о чем я. А вот и сам код из сети:
@echo off
setlocal enableextensions enabledelayedexpansion
set sFile=BigText.txt
more +10 "%~0">"%sFile%"
endlocal
exit /b 0
Создаем большой текст
Весь текст в батнике
Здесь очень много строк
Так можно и спецсимволы :^)
`~!@#$%^&*()_+|\/.,;:'"
Три пустые строки
Последняя строка
megaloman
15-04-2020, 23:44
patrickfox, @Echo Off
cls
Set "OutFile=Z:\Box_Out\tra la la.txt"
rem Если надо, дописываем батник
FOR /F "usebackq delims=:" %%i IN (`FINDSTR /I /X /L /N /C:":Gen New File" "%~dpnx0"`) DO Set /A n=%%i
>"%OutFile%" More +%n% "%~dpnx0"
rem Если надо, дописываем батник
pause
Exit /B
rem Если надо, дописываем процедуры, каждую завершаем Exit /B
rem Текст для записи должен быть последним.
:Gen New File
Создаем большой текст
Весь текст в батнике
Здесь очень много строк
Так можно и спецсимволы :^)
`~!@#$%^&*()_+|\/.,;:'"
Три пустые строки
Последняя строка
А вот и сам код из сети: »
Первоисточник, содержащий «код из сети»: CMD/BAT - [решено] Как записать в txt файл большой кусок текста с помощью bat (http://forum.oszone.net/thread-249659.html) ;).
patrickfox
16-04-2020, 12:21
megaloman, хорошо, создам новую, а то появились дополнительные вопросы уже.
megaloman
16-04-2020, 12:24
patrickfox, а вы спросите в старой, Iska ссылку дал (http://forum.oszone.net/thread-249659.html)
patrickfox
16-04-2020, 14:40
megaloman, Там, как я понял, не совсем именно то, что нужно, в моем случае необходим многоуровневый файл.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.