Ander_73
- Стаж: 7 лет 10 месяцев
- Сообщений: 3868
- Репутация:127[+] [-]
|
hseg0, строчкане нужна, это просто для демонстрации результата.
|
Отправлено: 26-Сен-2022 15:32
(спустя 1 месяц 3 дня)
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
Приветствую Нет ли способа проверки существования переменной цикла? по аналогии с обычной переменной? возникла задачка обработать большой текстовый файл, такого вида:name1 name2 text name3 text text text name4 name5 text text name6 Т.е. в некоторых строках одна подстрока, в некоторых несколько. Нужны только те, где несколько. Подумал, а вдруг прокатит что-то типа:for /f "tokens=1,*" %%A in (merge.txt) do ( if DEFINED %%B (>>merge_2.txt echo %%A %%B) ) Конечно же, толку не было. --- Поставленную задачу я, в принципе, уже решил двумя способами:-=1=- for /f "tokens=1,*" %%A in (merge.txt) do ( set var=%%B if DEFINED var (>>merge_2.txt echo %%A %%B) ) -=2=- <merge.txt >merge_2.txt findstr /RC:".* .*" --- Но осталось пара вопросов, чисто для общего развития: 1) есть ли все-таки способ проверки существования переменной цикла? или колличества токенов в строке? 2) были сомнения насчет первого способа, ведь присвоение переменной var значения происходит в цикле, тем не менее он работает и без каких либо хитростей (без call или EnableDelayedExpansion), получается для if DEFINED это вообще не имеет значения? получается, что новое значение переменной (присвоенное в текущей итерации цикла) сразу прочитать нельзя, а проверить существование этой переменной можно? и когда переменная получала нулевое значение (если %%B не было) и она обнулялась, то это тоже сразу же "было известно"... интересненько
|
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
Ander_73, опять я сам себя перемудрил)) спасибо)
|
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
столкнулся с проблемой: 1. Выбор файла с помощью FileToOpen:chcp 1251>nul set "list_file=" for /f "delims=" %%A in ('FileToOpen "set list_file=" "*.txt;*.cfg;*.ini" "SELECT A FILE" /noquote') do %%A chcp 866>nul 2. Вывод строк, отфильтрованных с помощью findstr:for /f "tokens=*" %%A in ('findstr /bvrc:" *[#/;]" "%list_file%"') do echo %%A Как выяснилось, findstr капризен к имени(пути) файла - попался вот такой:E:\Текст «Текст» Текст\имя.txt В итоге ошибка:FINDSTR: Не удается открыть E:\'?Єбв <'?Єбв> '?Єбв\Ё┐п.txt --- - Путь в переменную попал как надо (пробовал его просто выводить) - Проблема именно в findstr (пробовал вне скрипта, просто в командной строке выполнить: findstr "." "E:\Текст «Текст» Текст\имя.txt" - Пробовал предварительно переключать codepage на 1251 (и на 65001), толку нет - При этом с find проблем нет: find "." "E:\Текст «Текст» Текст\имя.txt" (отрабатывает как надо) --- Получается, что более продвинутый findstr уступает простенькому find? Возможно и еще какие-то символы в имени файла его собьют с толку? Проблема в том, что нужен именно findstr, можно ли как-то бороться с его слабостью? Пока не придумал ничего лучше чем переделать 1ю часть вот так:chcp 1251>nul set "list_file=" for /f "delims=" %%A in ('FileToOpen "set list_file=" "%SystemDrive%\*.txt;*.cfg;*.ini" "SELECT A FILE WITH PACKAGES LIST" /noquote') do %%A chcp 866>nul copy /Y "%list_file%" "tmp\list_file.txt" set "list_file=tmp\list_file.txt" Но это уже обходной вариант, хотелось бы саму проблему понять...
|
JuraAD
- Стаж: 3 года 5 месяцев
- Сообщений: 86
- Репутация:27[+] [-]
|
cartmenezz, Не понял что ты делаешь? Создал: O:\x\._\_\Текст «Текст» Текст>dir /b /s O:\x\._\_\Текст «Текст» Текст\1.txt Содержимое 'O:\x\._\_\Текст «Текст» Текст\1.txt': 1 2 3 11 12 13 21 22 23 Написал скрипт 1.cmd: @echo off chcp 1251>nul type "O:\x\._\_\Текст «Текст» Текст\1.txt" | findstr "1" chcp 866>nul set /p a= Результат: O:\x\._\_>1.cmd 1 11 12 13 21 ps: делай type по файлам и фильтруй содержимое...
|
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
Приветствую. Нужно через cmd получить текущий ip-адрес. Проблема в том, что ipconfig выдает больше чем нужно: У меня, например, установлен VirtualBox, его ip так же присутствует в списке. Получается, если просто искать по "IPv4", то будет два совпадения. --- Заметил, что у Блока VirtualBox пустое поле " Default Gateway". Можно ли за это зацепиться? Всегда ли будет так? у других виртуалок оно тоже пустое? Тогда можно было бы как-то так:chcp 437>nul set ip=& for /f "tokens=1,2 delims=:" %%A in ('ipconfig') do ( if "%%A" EQU " IPv4 Address. . . . . . . . . . . " set "ip=%%B"& call set "ip=%%ip: =%%" if "%%A" EQU " Default Gateway . . . . . . . . . " if "%%B" NEQ " " GoTo :2 ) :2 if DEFINED ip echo %ip% echo. pause или так:chcp 437>nul set ip=& for /f "tokens=1,2 delims=:" %%A in ('ipconfig') do ( echo %%A| findstr "IPv4" >nul && (set "ip=%%B"& call set "ip=%%ip: =%%") echo %%A| findstr "Gateway" >nul && (if "%%B" NEQ " " GoTo :2) ) :2 if DEFINED ip echo %ip% echo. pause К сожалению, нет возможности опробовать на Win7, Win8, поэтому насчет первого варианта больше сомнений (вдруг вывод ipconfig чуть другой), просто второй вариант подольше отрабатывает, а первый вообще без задержки... Так что если в принципе буду уверен в данном способе, не поленюсь и поставлю другие системы для тестов. Главный вопрос, всегда ли будет работать такой метод, или при каких-нибудь настройках системы, каком-нибудь установленном стороннем софте в выхлопе ipconfig могут быть еще непустые "Default Gateway"?-Еще была мысль использовать arp:C:\Users\UsER1>arp -a Interface: 192.168.56.1 --- 0x2 Internet Address Physical Address Type 192.168.56.255 ff-ff-ff-ff-ff-ff static 224.0.0.2 01-00-5e-00-00-02 static 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.251 01-00-5e-00-00-fb static 224.0.0.252 01-00-5e-00-00-fc static 239.255.255.250 01-00-5e-7f-ff-fa static Interface: 192.168.1.140 --- 0xb Internet Address Physical Address Type 192.168.1.1 50-ff-20-69-01-6f dynamic 192.168.1.86 90-48-9a-45-9c-8d dynamic 192.168.1.110 c0-d2-f3-42-d9-0a dynamic 192.168.1.120 00-9e-c8-b3-82-c6 dynamic 192.168.1.255 ff-ff-ff-ff-ff-ff static 224.0.0.2 01-00-5e-00-00-02 static 224.0.0.22 01-00-5e-00-00-16 static 224.0.0.251 01-00-5e-00-00-fb static 224.0.0.252 01-00-5e-00-00-fc static 239.255.255.250 01-00-5e-7f-ff-fa static 255.255.255.255 ff-ff-ff-ff-ff-ff static И брать строки с типом "dynamic", это как раз адреса нужного формата.. Мне именно формат адреса нужен (устройств в локалке), т.е. ip без последней цифры (192.168.1. в моем случае)... Но как и с первым методом, опасаюсь, что просто подгоняю под свои условия, под свой комп, свою сеть... А нужна универсальность.. ... Я в этих "сетевыми" делах совсем не разбираюсь, может есть еще какие команды, которые могут выдать нужный адрес(а)? или сторонняя утилита, но такая чтобы на нее антивирусы не огрызались?
Последний раз редактировалось: cartmenezz (2022-10-06 21:45), всего редактировалось 1 раз
|
Ander_73
- Стаж: 7 лет 10 месяцев
- Сообщений: 3868
- Репутация:127[+] [-]
|
97365Заметил, что у Блока VirtualBox пустое поле " Default Gateway". Да, шлюз в системе должен быть только один. Можно прописать и больше, но тогда - ой.
|
JuraAD
- Стаж: 3 года 5 месяцев
- Сообщений: 86
- Репутация:27[+] [-]
|
cartmenezz,ROUTEROUTE.EXE print =========================================================================== Список интерфейсов 8...хх хх хх хх хх 01 ......Check Point Virtual Network Adapter For Endpoint VPN Client 6...хх хх хх хх хх 02 ......Qualcomm Atheros AR8171/8175 PCI-E Gigabit Ethernet Controller (NDIS 6.30) 1...........................Software Loopback Interface 1 =========================================================================== IPv4 таблица маршрута =========================================================================== Активные маршруты: Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика 0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.2 35 127.0.0.0 255.0.0.0 On-link 127.0.0.1 331 127.0.0.1 255.255.255.255 On-link 127.0.0.1 331 127.255.255.255 255.255.255.255 On-link 127.0.0.1 331 192.168.0.0 255.255.255.0 On-link 192.168.0.2 291 192.168.0.2 255.255.255.255 On-link 192.168.0.2 291 192.168.0.255 255.255.255.255 On-link 192.168.0.2 291 224.0.0.0 240.0.0.0 On-link 127.0.0.1 331 224.0.0.0 240.0.0.0 On-link 192.168.0.2 291 255.255.255.255 255.255.255.255 On-link 127.0.0.1 331 255.255.255.255 255.255.255.255 On-link 192.168.0.2 291 =========================================================================== Постоянные маршруты: Отсутствует Дефолтный шлюз 1 (может отсутствовать, или несколько, но с разной метрикой/приоритет - не встречал) - отмечен жирным, физических интерфейсов может быть куча, у каждого может быть несколько сетей и соответствующих им шлюзов (шлюза может и не быть, если сеть внутренняя и нет внешнего доступа)... Вообще, шлюз прописывается для сети для обращения во внешний мир, а не физического интерфейса... Обрати внимание: 224.0.0.0 240.0.0.0 On-link 127.0.0.1 331 224.0.0.0 240.0.0.0 On-link 192.168.0.2 291 224.0.0.0 - мультимедия пока работает и-фейс 192.168.0.2 будет срабатывать маршрут по приоритету 192.168.0.2 291 исчезнет 192.168.0.2 - сработает 127.0.0.1 331 127.0.0.1 - внутреняя сеть (loopback)
|
Отправлено: 09-Окт-2022 19:28
(спустя 1 день 21 час)
cartmenezz
- Стаж: 9 лет 3 месяца
- Сообщений: 527
- Репутация:14[+] [-]
- Откуда: Калининград
|
JuraAD, Пока не понял, как мне всем этим воспользоваться, доберусь до компа и опробую команду, может станет яснее) ... Благодарю! ... как я понял, надо искать строку с 0.0.0.0 и брать третью подстроку... Но, если брать в расчет это:97383 может отсутствовать, или несколько, но с разной метрикой ... физических интерфейсов может быть куча, у каждого может быть несколько сетей и соответствующих им шлюзов (шлюза может и не быть, если сеть внутренняя и нет внешнего доступа)... то, видимо, не слишком надёжный метод получается...
|
Ander_73
- Стаж: 7 лет 10 месяцев
- Сообщений: 3868
- Репутация:127[+] [-]
|
cartmenezz, если в системе несколько шлюзов, то это либо кривые руки, либо сложная система роутинга, прописанная вручную. Вряд ли рядовой юзер будет заниматься таким шаманством.
|
JuraAD
- Стаж: 3 года 5 месяцев
- Сообщений: 86
- Репутация:27[+] [-]
|
Ander_73, Включил в параллель к ethernet WiFi - результат -) :routeROUTE.EXE print =========================================================================== Список интерфейсов 8...xx xx xx xx xx 01 ......Check Point Virtual Network Adapter For Endpoint VPN Client 7...xx xx xx xx xx 02 ......Microsoft Wi-Fi Direct Virtual Adapter 48...xx xx xx xx xx 03 ......Microsoft Hosted Network Virtual Adapter 6...xx xx xx xx xx 04 ......Qualcomm Atheros AR8171/8175 PCI-E Gigabit Ethernet Controller (NDIS 6.30) 11...xx xx xx xx xx 05 ......Qualcomm Atheros AR946x Wireless Network Adapter 1...........................Software Loopback Interface 1 =========================================================================== IPv4 таблица маршрута =========================================================================== Активные маршруты: Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика 0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.2 35 <-Ethernet 0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.5 50 <-WiFi 127.0.0.0 255.0.0.0 On-link 127.0.0.1 331 127.0.0.1 255.255.255.255 On-link 127.0.0.1 331 127.255.255.255 255.255.255.255 On-link 127.0.0.1 331 192.168.0.0 255.255.255.0 On-link 192.168.0.2 291 192.168.0.0 255.255.255.0 On-link 192.168.0.5 306 192.168.0.2 255.255.255.255 On-link 192.168.0.2 291 192.168.0.5 255.255.255.255 On-link 192.168.0.5 306 192.168.0.255 255.255.255.255 On-link 192.168.0.2 291 192.168.0.255 255.255.255.255 On-link 192.168.0.5 306 224.0.0.0 240.0.0.0 On-link 127.0.0.1 331 224.0.0.0 240.0.0.0 On-link 192.168.0.2 291 224.0.0.0 240.0.0.0 On-link 192.168.0.5 306 255.255.255.255 255.255.255.255 On-link 127.0.0.1 331 255.255.255.255 255.255.255.255 On-link 192.168.0.2 291 255.255.255.255 255.255.255.255 On-link 192.168.0.5 306 =========================================================================== Постоянные маршруты: Отсутствует Ничего страшного и сложного в этом нет... Система сама сгенирила маршруты. Статику пишут когда нужно перерулить сетки в другой интерфейс с сеткой...
|
Отправлено: 13-Окт-2022 19:47
(спустя 2 дня 23 часа)
dimo70
- Стаж: 7 лет
- Сообщений: 3787
- Репутация:27[+] [-]
- Откуда: BG
|
|
Страница 77 из 94
Текущее время: 23-Дек 13:40
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|