Я работаю над пакетным скриптом, который будет запрашивать некоторые реестры на других компьютерах Windows. Он собирается перебирать все живые IP-адреса, и это тоже после проверки, если я получаю TTL от 120 до 128. Еще одно требование - сначала проверить, успешно ли первый запрос реестра на каждой машине. Например, он начнется с 192.168.1.1, пинг его один раз. Получите значение TTL. Если TTL колеблется от 120 до 128, то это система окон. Теперь запросите первый реестр. Если запрос был успешным, повторите запрос еще на 6 реестров и продолжайте записывать результаты в файл txt. пинг часть я был в состоянии получить с помощью следующих действий:Вложенный пакетный скрипт с циклами for, if и reg
for /l %%a in (1,1,254) do for /f "tokens=8 delims=^= " %%b in ('ping -n 1 192.168.1.%%a ^| find /I "TTL"') do echo 192.168.1.%%a -- Online , TTL: %%b
Теперь мне нужно добавить условие IF к нему. Но он не показывает никакого вывода:
for /l %%a in (1,1,254) do for /f "tokens=8 delims=^= " %%b in ('ping -n 1 192.168.1.%%a ^| find /I "TTL"') do if %%b==128 echo 192.168.1.%%a -- Online , TTL: %%b
Далее мне нужно запросить следующий раздел реестра:
reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName /v computername 2>null >> query_result.txt
Если это успех, остальные запросы из реестров. И этот процесс необходимо повторить для всех 254 IP-адресов. В простой и медленный рабочий, как я это сделал followingly (к примеру):
for /l %%i in (1,1,254) do (reg query \\192.168.1.%%i\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName /v computername >> result.txt & reg query \\192.168.1.%%i\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion /v productname 2>null >> result.txt)
Хотя выше код работает, но очень медленно, becoz он пытается запросить реестр на мертвых IP-адреса также. Я выполнял три метода отдельно, используя 3 файла результата. Я хочу их сгруппировать. Как я могу добавить все вместе? Plz разъясняет применение условных выражений IF, о том, как их использовать. Я пробовал в течение 2 дней, но не добился успеха.
Благодаря marc_kriss
Спасибо ... Но я не получаю выходное состояние IF. Я пробовал все возможные комбинации (здесь в лаборатории TTL только 128). Условие выполнено. Если я напечатаю переменную %% без IF, это произойдет, но после вывода IF это не будет. В противном случае я бы не отправил вопрос. – kriss
Да, сэр, вы правы. Хотя токены = 8 распознают TTL как 64 и 128, но он не делает этого в случае применения «IF» к команде. Я понял. Большое спасибо. Но не могли бы вы рассказать об использовании SET, который вы использовали. Это похоже на регулярные выражения (как в Linux), но я еще не узнал об этом. Попросите вас объяснить это. Также plz дает пример вложенных циклов FOR и IF. Пример 3 или 4 уровня вложенных циклов. U, возможно, обнаружил необходимость в нем с моего поста. Также использование брекетов '(' ')'. Буду признателен. – kriss
Это все еще не полностью работает для меня. Если я добавлю GEQ вместе с LEQ, он ничего не отобразит: @echo off Setlocal EnableDelayedExpansion set "yourstring =! Yourstring: ~ * TTL =!" set "yourstring =!yourstring: ~ 1! " для/l %% a in (1 7 8 100) do for/f" tokens = 9 delims =^= "%% b in ('ping -n 1 192.168.1. %% a^| find/I "TTL" ') do if %% b leq 128 if %% b GEQ 65 (echo 192.168.1. %% a online, TTL: %% b) – kriss