Мне нужен способ либо не использовать оператор for, либо найти способ выйти из цикла, если условие выполнено.Итерация через текстовый файл с помощью пакетного скрипта без оператора
Вот что у меня сейчас ...
for /f "delims=" %%a in ('type pclist.txt') do (
ping -n 1 %%a | findstr /i "reply" >nul 2>nul
if %errorlevel% equ 0 (
if exist "\\%%a\c$\windows\temp\installed.txt" (
echo %%a - Already installed >>results.txt
)
if not exist "\\%%a\c$\windows\temp\installed.txt" (
echo %%a - Not installed >>results.txt
)
)
ping -n 1 %%a | findstr /i "timed" >nul 2>nul
if %errorlevel% equ 0 echo %%a - No PING response >>results.txt
ping -n 1 %%a | findstr /i "transmit" >nul 2>nul
if %errorlevel% equ 0 echo %%a - PING transmit failed >>results.txt
)
Это дает мне такой результат ...
192.168.144.1 - Already installed
192.168.144.1 - No PING response
192.168.144.1 - PING transmit failure
192 168.144.2 - Already installed
192.168.144.2 - No PING response
192.168.144.2 - PING transmit failure
192.168.144.3 - Not installed
192.168.144.3 - No PING response
192.168.144.3 - PING transmit failure
То, что я хотел бы сделать, это быть в состоянии выйти из для когда выполняется какое-либо первое условие. Таким образом, я бы такой результат вместо ...
192.168.144.1 - Already installed
192 168.144.2 - Already installed
192.168.144.3 - Not installed
Я надеюсь, что я просто с видом что-то простое, и это будет просто еще одна из тех ошибок, I-D-10-T для меня. (lol)
Thanx заранее.
В простом английском. Вот эта цель:
Using FOR command, read list of IP addresses from text file.
For each IP address read, PING and check response.
If PING returns a reply, check for existence of file.
If file exists,
ECHO value 1 to results file, end FOR loop, proceed with next IP address in list.
If file does not exist,
ECHO value 2 to results file, end FOR loop, proceed with next IP address in list.
If PING does not return a reply, ECHO PING error text to results file, end FOR loop, proceed with next IP address in list.
Надеюсь, это немного более понятно.
Thanx снова.
Вы на самом деле не объяснить, если вы хотите, чтобы эти последние 4 строки кода, если работать на всех. Мои результаты ping не имеют слова ** timed ** или ** передачи **. Что вы пытаетесь сделать с этими результатами ping? – Squashman
Я не понимаю вашего беспокойства; однако: ** 1. ** Команда 'goto' нарушает цикл' for/f'. ** 2. ** Вашему коду нужно использовать Delayed Expansion для доступа к '! Errorlevel!' Внутри цикла for, хотя в этом случае это необязательно: просто используйте 'if errorlevel 1 (' form (и измените код соответственно). – Aacini
Простите, что.Возможные результаты PING, которые я могу получить, - это ... »Ответ от ip.add.re.ss: bytes = ## time = # ms TTL = ###" или "Ответить от ip.add.re.ss: Целевой узел недостижим «. или «Запрос Ping не смог найти хост ip.add.re.ss. Пожалуйста, проверьте имя и повторите попытку». или «Время ожидания запроса». или «PING: передача не удалась. Общий сбой». Поэтому я ищу эти результаты findstr выше. Основываясь на полученном результате ping, цель состоит в том, чтобы повторить инструкцию в файл. Теперь несколько эхо-сигналов появляются за пинг вместо одного и сделано. – user3208239