[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
hseg0, строчка
echo %name%%random%
не нужна, это просто для демонстрации результата.

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 7 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
Приветствую aa
Нет ли способа проверки существования переменной цикла? по аналогии с обычной переменной?
возникла задачка обработать большой текстовый файл, такого вида:
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 не было) и она обнулялась, то это тоже сразу же "было известно"... интересненько

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
cartmenezz, вот ты заумник-то! ag
for /f "tokens=1,*" %%A in (merge.txt) do if "%%b" neq "" ...

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 7 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
Ander_73, aa
опять я сам себя перемудрил)) спасибо)

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 7 месяцев
  • Сообщений: 526
  • Репутация: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
  • 28398
  • Стаж: 2 года 8 месяцев
  • Сообщений: 70
  • Репутация:25

    [+] [-]
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
  • 1384
  • Стаж: 8 лет 7 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
97281делай type по файлам и фильтруй содержимое
aa действительно, не додумался, спасибо (кажется давным давно у меня как-то так и было оформлено, но потом видимо решил сократить, раз уж можно напрямую из файла читать, и долгое время все было ОК... но всё-таки жаль, что есть такое ограничение... find вон не жалуется...)

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 7 месяцев
  • Сообщений: 526
  • Репутация: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
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
97365Заметил, что у Блока VirtualBox пустое поле " Default Gateway".
Да, шлюз в системе должен быть только один. Можно прописать и больше, но тогда - ой.

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 7 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
97366Да, шлюз в системе должен быть только один
aa Отличненько) Большое спасибо!
тогда, наверное, можно вообще не мудрить и выкинуть поиск ip, а сразу брать значение Default Gateway, и уже от него убирать последний блок после точки (ну или пару блоков.. наверное надо ориентироваться на значение "Subnet Mask", смотреть сколько его блоков равно 255).. Шлюз ведь не может отличаться от ip-адресов в сети, вернее его формат...
...
Премного благодарен az

[Цитировать]

    JuraAD
  • 28398
  • Стаж: 2 года 8 месяцев
  • Сообщений: 70
  • Репутация:25

    [+] [-]
cartmenezz,

ROUTE

ROUTE.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)

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 7 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
JuraAD, aa
Пока не понял, как мне всем этим воспользоваться, доберусь до компа и опробую команду, может станет яснее)
...
Благодарю!
...
как я понял, надо искать строку с 0.0.0.0 и брать третью подстроку...
Но, если брать в расчет это:
97383
может отсутствовать, или несколько, но с разной метрикой
...
физических интерфейсов может быть куча, у каждого может быть несколько сетей и соответствующих им шлюзов (шлюза может и не быть, если сеть внутренняя и нет внешнего доступа)...
то, видимо, не слишком надёжный метод получается...

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
cartmenezz, если в системе несколько шлюзов, то это либо кривые руки, либо сложная система роутинга, прописанная вручную. Вряд ли рядовой юзер будет заниматься таким шаманством.

[Цитировать]

    JuraAD
  • 28398
  • Стаж: 2 года 8 месяцев
  • Сообщений: 70
  • Репутация:25

    [+] [-]
Ander_73, Включил в параллель к ethernet WiFi - результат -) :

route

ROUTE.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
===========================================================================
Постоянные маршруты:
Отсутствует
Ничего страшного и сложного в этом нет... Система сама сгенирила маршруты. Статику пишут когда нужно перерулить сетки в другой интерфейс с сеткой...

[Цитировать]

    dimo70
  • 17296
  • Стаж: 6 лет 3 месяца
  • Сообщений: 3990
  • Репутация:26

    [+] [-]
  • Откуда: BG
Возможно ли батник MAS16 запустить с определенными ключами после команды, так чтоб автоматом произвести определенные действия.
Например: - активирует офис онлайн и ставит shedule task? aa

_________________
Подпись отключена за нарушение правил форума

Страница 77 из 89


Показать сообщения:    

Текущее время: 29-Мар 15:22

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы