Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Случайное значение переменной в цикле

Ответить
Настройки темы
CMD/BAT - [решено] Случайное значение переменной в цикле

Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброе время суток дорогие форумчане!

Возникла проблема с выводом значения переменной из заданного диапазона, когда пингую определенный 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

Отправлено: 15:31, 15-04-2020

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
ping -n !r10!
Не?
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:08, 15-04-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, так удивительно просто оказалось?) Спасибо, работает! А есть ли информация по этим спец символам где-либо? Так в следующий раз и не соображу какие в какой ситуации применять "%" или "!".

Отправлено: 17:41, 15-04-2020 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Скажем так: всё упирается в понятие «оператор»/«инструкция»/«команда» и тот факт, что переменные окружения в %…% раскрываются в момент его исполнения. То есть, %r10% раскрывается однократно в момент начала исполнения конструкции For /L %%i In (1,1,10) Do (…). И, поскольку в этот момент переменной окружения r10 ещё не существует — получается пустое место.

Чтобы переменная окружения раскрывалась тогда, когда происходит исполнение команды ping -n %r10% 127.0.0.1 > nul, требуется задание отложенного раскрытия переменных окружения (setlocal enabledelayedexpansion) и использования символов !…! вместо %…%.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:17, 15-04-2020 | #4


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Можно без setlocal enabledelayedexpansion
Код: Выделить весь код
@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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 15-04-2020 в 21:03.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:56, 15-04-2020 | #5


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, благодарю за предоставление иных подходов!)
Iska, Прошу прощения за оффтоп, в следующий раз уже создам новую тему, но думаю вопрос тоже не будет сильно сложным для понимающих, одним из решений уже обзавелся, если можете подсказать иной способ или дополнить имеющийся буду вновь признателен.
Имеется батник, внутри него прописана команда на создание другого батника (или текстового документа, содержащего команды, которые могут быть исполнены в случае изменения расширения с .txt на .bat), проблема заключается в том, что при простом экранировании символов, читаемость чресчур снижается, и хотелось бы узнать, есть ли способ более изящный? В качестве примера, на просторах интернета нашёл одно решение, но его проблема в том, что после текста, который собираемся скопировать в новый файл, уже не пропишешь новых команд (или я не знаю как их прописать). А после этого текста будут ещё команды, которые не должны быть скопированы. Например два таких скрипта идущих подряд. Надеюсь вы понимаете о чем я. А вот и сам код из сети:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sFile=BigText.txt
more +10 "%~0">"%sFile%"

endlocal
exit /b 0


Создаем большой текст
Весь текст в батнике
Здесь очень много строк
Так можно и спецсимволы :^)
`~!@#$%^&*()_+|\/.,;:'"
Три пустые строки

Последняя строка

Отправлено: 23:09, 15-04-2020 | #6


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


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
Создаем большой текст
Весь текст в батнике
Здесь очень много строк
Так можно и спецсимволы :^)
`~!@#$%^&*()_+|\/.,;:'"
Три пустые строки

Последняя строка

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:44, 15-04-2020 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата patrickfox:
А вот и сам код из сети: »
Первоисточник, содержащий «код из сети»: CMD/BAT - [решено] Как записать в txt файл большой кусок текста с помощью bat .
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:21, 16-04-2020 | #8


Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, хорошо, создам новую, а то появились дополнительные вопросы уже.

Отправлено: 12:21, 16-04-2020 | #9


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


patrickfox, а вы спросите в старой, Iska ссылку дал

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 16-04-2020 в 13:52.


Отправлено: 12:24, 16-04-2020 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Случайное значение переменной в цикле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - Не передается значение переменной Swit0 Скриптовые языки администрирования Windows 2 18-11-2019 22:10
CMD/BAT - [решено] Замена на значение переменной Darkar25 Скриптовые языки администрирования Windows 2 30-07-2018 17:30
CMD/BAT - [решено] Не выполняется присвоение значения переменной в цикле darkelfsfx Скриптовые языки администрирования Windows 2 21-08-2016 18:46
VBS/WSH/JS - [решено] Вставить значение переменной в путь к файлу Dedcase Скриптовые языки администрирования Windows 5 11-12-2015 18:14
Любой язык - [решено] Присвоить значение переменной(исключая заданные) zion87 Скриптовые языки администрирования Windows 6 11-12-2011 20:29




 
Переход