|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Случайное значение переменной в цикле |
|
|
CMD/BAT - [решено] Случайное значение переменной в цикле
|
Новый участник Сообщения: 15 |
Доброе время суток дорогие форумчане!
Возникла проблема с выводом значения переменной из заданного диапазона, когда пингую определенный ip, переменная R10 не генерируется по указанным правилам (ниже приведен код, буду благодарен если подскажете что поменять): |
|
Отправлено: 15:31, 15-04-2020 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 16:08, 15-04-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать Iska, так удивительно просто оказалось?) Спасибо, работает! А есть ли информация по этим спец символам где-либо? Так в следующий раз и не соображу какие в какой ситуации применять "%" или "!".
|
Отправлено: 17:41, 15-04-2020 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2728
|
Профиль | Отправить 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 |
|
------- Последний раз редактировалось megaloman, 15-04-2020 в 21:03. Отправлено: 20:56, 15-04-2020 | #5 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать megaloman, благодарю за предоставление иных подходов!)
Iska, Прошу прощения за оффтоп, в следующий раз уже создам новую тему, но думаю вопрос тоже не будет сильно сложным для понимающих, одним из решений уже обзавелся, если можете подсказать иной способ или дополнить имеющийся буду вновь признателен. Имеется батник, внутри него прописана команда на создание другого батника (или текстового документа, содержащего команды, которые могут быть исполнены в случае изменения расширения с .txt на .bat), проблема заключается в том, что при простом экранировании символов, читаемость чресчур снижается, и хотелось бы узнать, есть ли способ более изящный? В качестве примера, на просторах интернета нашёл одно решение, но его проблема в том, что после текста, который собираемся скопировать в новый файл, уже не пропишешь новых команд (или я не знаю как их прописать). А после этого текста будут ещё команды, которые не должны быть скопированы. Например два таких скрипта идущих подряд. Надеюсь вы понимаете о чем я. А вот и сам код из сети: |
Отправлено: 23:09, 15-04-2020 | #6 |
Ветеран Сообщения: 2728
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Цитата patrickfox:
![]() |
|
Отправлено: 10:21, 16-04-2020 | #8 |
Новый участник Сообщения: 15
|
Профиль | Отправить PM | Цитировать megaloman, хорошо, создам новую, а то появились дополнительные вопросы уже.
|
Отправлено: 12:21, 16-04-2020 | #9 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать patrickfox, а вы спросите в старой, Iska ссылку дал
|
------- Последний раз редактировалось megaloman, 16-04-2020 в 13:52. Отправлено: 12:24, 16-04-2020 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|