Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как записать в переменную результат выполнения команды? (http://forum.oszone.net/showthread.php?t=131984)

MSI 14-02-2009 18:11 1038386

Как записать в переменную результат выполнения команды?
 
Мне необходимо что-то подобное:

%переменная% := (результат команды hostname), чтобы можно было использовать значение переменной дальше в скрипте...

Сейчас на ум приходит только hostname > file.ext , с последущим вычитыванием имени компьютера...

Petya V4sechkin 14-02-2009 18:14 1038389

%COMPUTERNAME% - стандартная переменная.

MSI 14-02-2009 18:25 1038396

Petya V4sechkin, благодарю с переменной %COMPUTERNAME% результат достигнут.
Сразу проверить как-то не решился - результаты выполнения hostname и set computername несколько разнятся - это и смутило...

А все-таки, можно ли в переменную "заталкивать" результат выполнения команды?

Petya V4sechkin 14-02-2009 18:32 1038407

Цитата:

Цитата MSI
А все-таки, можно ли в переменную "заталкивать" результат выполнения команды?

Код:

@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

For /F "Delims=" %%I In ('Hostname') Do Set V=%%~I
Echo !V!


MSI 14-02-2009 18:50 1038426

Petya V4sechkin, Благодарю!

Если можно, хочу уточнить в чем разница между Echo !V! и Echo %V% ?

Petya V4sechkin 14-02-2009 20:36 1038500

MSI, !V! - связывание времени выполнения (включается с помощью EnableDelayedExpansion). Подробнее можно почитать в описании команды Set:
set /?

Вообще в вашем примере работает и %V% (потому что подстановка значения не происходит внутри цикла (For) или условия (If)).

kyi13 12-07-2013 11:54 2183558

Добрый день!
Нашел эту ветку на форуме, т.к. вопрос похожий, но посложнее.
Есть вот такие строки
Код:

NSLOOKUP %IPcomp% | FIND /i "Имя:" > C:\Script\OffComp\nslookup_.txt
FOR /F "tokens=2 delims=:" %%b IN (C:\Script\OffComp\nslookup_.txt) DO (
ECHO Выключен %IPcomp% %%b >> C:\Script\OffComp\report.txt
)

Хотелось бы в первой строке избежать записи в промежуточный файл nslookup_.txt, а что бы писалось в переменную.
А дальше при помощи FOR я из переменной вытащу что мне необходимо.

Подскажите как это можно реализовать?

Iska 12-07-2013 17:25 2183763

kyi13, Вам не нужно, чтобы «писалось в переменную»:
Код:

for /f "usebackq tokens=2 delims=:" %%i in (
        `nslookup.exe %IPcomp% ^| find.exe /i "Имя:"`
) do (
        >>"C:\Script\OffComp\report.txt" echo Выключен %IPcomp% %%i
)


Arsenik77 01-09-2013 19:01 2211161

Не буду плодить темы, напишу сюда

есть команда Snmputil.exe get 192.168.15.94 public .1.3.6.1.4.1.318.1.1.1.3.3.3.0 , которая выводит результат в виде двух строк
Variable = .iso.org.dod.internet.private.enterprises.318.1.1.1.3.3.3.0
Value = Gauge32 2174


Необходимо выделить из результата четыре последние цифры , в данном случае число 2174.

Foreigner 01-09-2013 19:46 2211187

Код:

@echo off
setlocal

for /f "tokens=2 delims==" %%i in (' Snmputil.exe get 192.168.15.94 public .1.3.6.1.4.1.318.1.1.1.3.3.3.0 ') do set "var=%%i"
set "var=%var:~-4%"
echo %var%


Farxat 03-04-2014 17:05 2332623

Дабы не создавать лишние темы спрошу здесь) Есть скрипт в котором именно с первого раза не выводятся данные при применении команды echo

Код:

@echo off
set p_basedir=path
set p_1cPlatform=path
set P_update_rel=path
set d_result=path

FOR /F "usebackq delims=" %%i IN (`dir /AD /B %p_basedir%`) do (
 set base_n=%%i
 For /F "usebackq delims=" %%j IN (`dir /AD /B %p_update_rel%`) do (
  set base_rel=%%j
  "%p_1cPlatform%\1cv8.exe" CONFIG  /F "%p_basedir%\%%i" /UpdateCfg "%P_update_rel%\%%j\1cv8.cfu" /UpdateDBcfg /DumpResult "%d_result%\%%i_%%j.log"

  @echo (%base_n% _ %base_rel% _pass!)
  )
 )

Запускаю cmd, запускаю скрипт, он отрабатывает но всегда пишет "( _ pass!". Именно с одной скобкой. Запускаю его второй раз, данные из переменных выводятся корректно. В чем может быть дело?

Ради интереса оставил просто

@echo %base_n%

Получаю в первый раз: Режим вывода команд на экран (ECHO) отключен
Второй раз получаю значение переменной.

Farxat 03-04-2014 17:23 2332635

UPD: Вывел на прямую %%i и %%j и проблема ушла.

Georgio 03-04-2014 17:50 2332651

Код:

@echo off
setlocal enabledelayedexpansion
set p_basedir=path
set p_1cPlatform=path
set P_update_rel=path
set d_result=path

FOR /F "usebackq delims=" %%i IN (`dir /AD /B %p_basedir%`) do (
 set base_n=%%i
 For /F "usebackq delims=" %%j IN (`dir /AD /B %p_update_rel%`) do (
  set base_rel=%%j
  "%p_1cPlatform%\1cv8.exe" CONFIG  /F "%p_basedir%\%%i" /UpdateCfg "%P_update_rel%\%%j\1cv8.cfu" /UpdateDBcfg /DumpResult "%d_result%\%%i_%%j.log"

  @echo (!base_n! _ !base_rel!_pass^^^!)
  )
 )


Farxat 03-04-2014 18:04 2332663

Спасибо за совет!

Цитата:

@echo (!base_n! _ !base_rel!!_pass^^^!)
Устройте пожалуйста небольшой ликбез по ^^^ в данном случаи и ! вместо %

Iska 03-04-2014 18:22 2332670

Цитата:

Цитата Farxat
Устройте пожалуйста небольшой ликбез по ^^^ в данном случаи и ! вместо % »

Код:

setlocal /?
+ Как экранировать символ?

rectator 23-11-2015 22:01 2578285

Чтобы не плодить темы, спрошу здесь.
Как присвоить переменной в батнике результат выполнения команды?
Команда возвращает следующее:
Код:

...
(bootloader) OPEN_ME572CL_V11.8.0.157.1
OKAY [  0.862s]
finished. total time: 0.862s

Мне нужно вот это OPEN_ME572CL_V11.8.0.157.1 присвоить переменной. Вывод идёт в STDERR.

Iska 23-11-2015 22:14 2578289

Цитата:

Цитата rectator
Вывод идёт в STDERR. »

При разборе по «for /f» перенаправить вывод stderr в stdout, наподобие:
Код:

for /f "usebackq delims=" %%i in (
        `2^>^&1 "команда"`
) do echo %%i

Цитата:

Цитата rectator
Мне нужно вот это OPEN_ME572CL_V11.8.0.157.1 присвоить переменной. »

По каким признакам выделяем эту строку и этот текст среди прочего вывода?

rectator 23-11-2015 22:22 2578293

Цитата:

Цитата Iska
По каким признакам выделяем эту строку и этот текст среди прочего вывода? »

По признаку (bootloader) дальше в переменную (без пробелов).

P.S. не работает ваша конструкция.

Вот это:
Код:

fastboot getvar version 2> version
FOR /F "tokens=2" %%i IN (version) do echo comment=%%i

почти делает то что надо:
Код:

comment=OPEN_ME572CL_V11.8.0.157.1
comment=[
comment=total

Осталось извлечь ПЕРВОЕ значение.

Iska 23-11-2015 23:12 2578295

Попробуйте так:
Код:

@echo off

for /f "usebackq tokens=2 delims=" %%i in (
        `2^>^&1 "fastboot.exe" oem get_build_version ^| find.exe /i "^(bootloader^)"`
) do set sBootLoader=%%i

if defined sBootLoader echo [%sBootLoader%]

Не проверялось. Если укажете, где взять пользуемый Вами «fastboot», возможно, смогу проверить.

rectator 23-11-2015 23:26 2578300

Через запись в файл сделать получилось и всё работает.

Ваш вариант работать не хочет, хотя команда проходит.

P.S. Сделал, всё оказалось просто:
Код:

FOR /F "tokens=2" %%a IN ('fastboot getvar version 1^>nul 2^>^&3') do set build=%%a & goto :ver
:ver
echo "%build%"


Iska 24-11-2015 00:12 2578313

Ага. Я брал поновее версию. Но ни моя, ни Ваша без устройства работать не хотят :).

В предыдущем варианте я что-то перебдел. Попробуйте так:
Код:

@echo off

for /f "usebackq tokens=2" %%i in (
        `2^>^&1 "fastboot.exe" oem get_build_version ^| find.exe /i "^(bootloader^)"`
) do set sBootLoader=%%i

if defined sBootLoader echo [%sBootLoader%]

или так:
Код:

@echo off

for /f "usebackq tokens=2" %%i in (
        `2^>^&1 "fastboot.exe" oem get_build_version ^| find.exe /i "(bootloader)"`
) do set sBootLoader=%%i

if defined sBootLoader echo [%sBootLoader%]


rectator 24-11-2015 00:35 2578321

Естественно без устройства не работает =)

Но зато ваш последний вариант отлично работает!
Спасибо за помощь.

Aquilo 14-02-2018 14:03 2797905

Есть команда
Код:

wmic.exe Process where "Name='Far.exe'" get WorkingSetSize
Вывод
Код:

WorkingSetSize 
6393856

Нужно засунуть вторую строчку (число) в переменную (через файл не хочу)
Попробовал предложанные в теме форы, не получилось

megaloman 14-02-2018 15:53 2797922

Код:

@Echo Off
cls

FOR /F "usebackq skip=1 delims=" %%s IN (`wmic.exe Process where "Name='Far.exe'" get WorkingSetSize`) DO Set /A S=%%s &GoTo :Cont
:Cont

Echo %S%
Pause


DJ Mogarych 14-02-2018 16:10 2797928

Если я правильно понял задачу (Powershell).
Код:

$p = Get-CimInstance win32_process -filter "name='far.exe'" | Select -ExpandProperty WorkingSetSize
New-Item env:farworkingsetsize -Value $p


x0r 14-02-2018 21:46 2798011

Есть такая буква!
Мне недавно тоже самое понадобилось и я сафсемвахуе был, когда понял что нету такой возм-сти в cmd-bat. Но оказалось что всё-таки можно и причем давно... но таким сопособом, что фиг додумаесся :yes: Способ нашелся тут
пользуемся ;) Для случая Aquilo
Код:

@echo off
 @setlocal ENABLEDELAYEDEXPANSION
for /f "delims= tokens=* usebackq" %%i  in (`wmic.exe Process where "Name='TOTALCMD.EXE'" get WorkingSetSize`) do @if not X%%i==X set FILES=!FILES! %%i
echo %FILES%
pause
exit

... и дальше через for "tokens=" берем что нужно. Мне понадобились имена папок и вот так
Код:

for /f "delims= tokens=* usebackq" %%i  in (`"dir /b g:\"`) do @if not X%%i==X set FILES=!FILES! %%i
имена загнал в одну переменную и через for подставлял.

Runn3r 14-08-2018 08:23 2826306

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

@echo off
setlocal EnableDelayedExpansion
For /F "Delims=" %%I In ('where /r d:\ "filename"') Do Set filename=%%~I
echo "%computername%"; !filename! > where.csv

Но, проблема в том что на выходе получаю только путь до последнего найденного файла, а их несколько, подскажите - как осуществить вывод всех найденных?
Спасибо!

alpap 14-08-2018 09:35 2826322

Runn3r,
сразу и записывать в файл, зачем там переменная:
Код:

@echo off
>where.csv (For /F "Delims=" %%I In ('where /r d:\ "filename"') Do @<nul set /p="%%~I;")
pause


Iska 14-08-2018 09:41 2826327

Код:

>"where.csv" (
    for /f "delims=" %%i in ('where.exe /r d:\ "filename"') do echo  %ComputerName%;%%~i
)

Цитата:

Цитата alpap
Код:

… @<nul set /p="%%~I;")
»

Они ж все в одну строчку будут?!

alpap 14-08-2018 09:45 2826330

Цитата:

Цитата Iska
Они ж все в одну строчку будут?! »

полагаю раз запись в csv, то так и надо.

Iska 14-08-2018 09:50 2826334

alpap, спасибо, ясно.

Runn3r 14-08-2018 14:52 2826420

Спасибо всем за помощь.
Не получается сделать в одну строчку, мне нужно будет использовать where для нескольких, разных файлов и чтобы в начале прописывалось имя компьютера: %computername%;filename1;filename2 и тд

@echo off
>where.csv echo %computername% && (For /F "Delims=" %%I In ('where /r d:\ "filename1"') Do @<nul set /p="%%~I;") && (For /F "Delims=" %%I In ('where /r d:\ "filename2"') Do @<nul set /p="%%~I;")
pause

Еще такой вопрос реально ли вообще вывести путь от куда запущены текущие java.exe процессы, без вывода аргументов с которыми он стартован? Пробовал через wmic с выводом commandline - путь указывает, но еще и указывает кучу не нужных аргументов с которыми стартован процесс (((

В итоге хотел бы получить такую информацию: %computername%;filename1;filename2;all_java.exe_process_path

Заранее огромное спасибо!

Iska 14-08-2018 15:06 2826428

Runn3r, так Вам как надо-то? В моём понимании или в понимании коллеги alpap? Такой:
Код:

ComputerName;c:\Windows\notepad.exe
ComputerName;c:\Windows\System32\notepad.exe
ComputerName;c:\Windows\SysWOW64\notepad.exe

или такой:
Код:

ComputerName;c:\Windows\notepad.exe;c:\Windows\System32\notepad.exe;c:\Windows\SysWOW64\notepad.exe
?

Цитата:

Цитата Runn3r
мне нужно будет использовать where для нескольких, разных файлов »

Ну, так и используйте несколько:
Код:

where.exe /r c:\ "notepad.exe" "calc.exe" "regedit.exe"
Скрытый текст

Runn3r 14-08-2018 15:09 2826429

нужно чтобы информация выводилась в строку

Iska 14-08-2018 15:26 2826439

Runn3r, значит, используйте вариант коллеги alpap. Как указать несколько масок зараз — сообщением выше.

Цитата:

Цитата Runn3r
Еще такой вопрос реально ли вообще вывести путь от куда запущены текущие java.exe процессы, »

Что есть в Вашем понимании «путь от куда запущены»?

Runn3r 14-08-2018 15:34 2826441

Цитата:

Цитата Iska
Что есть в Вашем понимании «путь от куда запущены»? »

На ПК установлены разные версии Java, одновременно выполняются несколько процессов java, нужен вывод откуда они запущены, нужен только путь без аргументов с которыми они стартованы

Iska 14-08-2018 17:07 2826463

Надо полагать, Вы подразумеваете под этим путь к исполняемому файлу.
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

>"where.csv" (
        <nul set /p sVar=%ComputerName%;
        for /f "usebackq delims=" %%i in (`where.exe /r c:\ "notepad.exe" "calc.exe" "regedit.exe"`) do <nul set /p sVar=%%~i;
        for /f "usebackq delims=" %%i in (`wmic.exe Process where "Name = 'java.exe'" get ExecutablePath /value`) do for /f "tokens=2 delims==" %%j in ("%%i") do <nul set /p sVar=%%j;
)

endlocal
exit /b 0

Правда, как Вы собираетесь в этом месиве, по недоразумению именуемом Вами csv, различать что где есть — не знаю. Впрочем, дело Ваше.

vdvas 05-11-2018 20:51 2839483

Здравствуйте.
Нужно передать в скрипт переменную залогиненного пользователя.
Узнать кто залогинился можно командой WMIC /NODE: "localhost" COMPUTERSYSTEM GET USERNAME
На выходе получается
Код:

UserName
DOMAIN\user

Нужно первую строчку убрать и имя домена с обратным слешем тоже.
Попробовал из того что выложено на форуме - не помогло.
Код:

FOR /F "usebackq skip=1 delims=" %%I IN (`WMIC /NODE: "localhost" COMPUTERSYSTEM GET USERNAME`) DO Set /P S=%%I
Echo S


Iska 05-11-2018 21:36 2839494

vdvas, возможно, Ваша проблема (для локальной машины) решается проще:
Код:

echo %userdomain%
echo %username%


vdvas 06-11-2018 10:36 2839528

Я на удаленной машине выполняю скрипт через psexec с ключом s, таким образом %username% здесь будет СИСТЕМА.
Поэтому такие системные переменные не годятся.

Iska 06-11-2018 22:16 2839605

Ясно. Тогда следовало бы упомянуть данное:
Цитата:

Цитата vdvas
на удаленной машине выполняю скрипт »

условие зараз. Равно как и причину, по которой Вы пользуете psexec, но не пользуете тот же Wbem для удалённого доступа (wmic.exe /node:RemoteMachine ComputerSystem get UserName…).

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
        `2^>nul wmic.exe ComputerSystem get UserName /value ^| 2^>nul find.exe /i "UserName="`
) do for /f "tokens=1,3 delims==\" %%j in ("%%~i") do (
        set s%%~j=%%~k
)

if defined sUserName echo [%sUserName%].

endlocal
exit /b 0


zbeypepels 07-10-2019 18:19 2891107

Цитата:

вывести путь от куда запущены текущие java.exe процессы, без вывода аргументов с которыми он стартован?
Код:

@echo off
setlocal ENABLEDELAYEDEXPANSION

rem Стартуем с %А а кончаем с %B 
for /f "tokens=1* delims==" %%A in ('
    wmic process where "Name='svchost.exe'" get ExecutablePath /value ^|findstr :
  ') do @if not X%%i==X set ProcPath=!ProcPath!%%B;

echo ProcPath: %ProcPath%
pause
exit


a_Wizard 15-10-2019 08:03 2892091

Не нашел точно подходящую тему относительно поставленной для .bat-файла задачи, поэтому пишу здесь (если все-же есть такая тема, просьба перенести мой пост туда).
Задача у меня такая. Имеется сайт на котором несколько тв-каналов. С них каждые 2 часа нужно извлекать их видеопотоки и вставлять в плейлист IPTV (каждые 2 часа потому, что таков срок живучести ссылок с данного сайта). Вручную выполнять эту задачу несколько раз в день утомительно (хотя сами потоки я умею извлекать). Поэтому подумал, может есть возможность написать .bat-файл, который будет выполнять эту задачу вместо меня. Пожалуйста дайте направление как это делается. Замечу, что такое реализовано в видеодополнениях приложения Kodi (для Android устройств), где ссылки обновляются на лету. Однако все эти скрипты для меня непостижимы. Потому решил спросить тут. Кто-нибудь может помочь?

alpap 15-10-2019 12:34 2892130

монтировку для извлечения потоков в планировщик под предел <= 2часа

Unter 24-03-2020 03:15 2914441

Есть программа, работает с флешки. Для обновления собственных баз запускается с ключами. Запуск идет через батник в котором формируется среда и временные папки. Некоторое время назад после очередного обновления, программа стала реагировать на состояние USB портов. Если в порт что то вставить или вынуть, она уходит из под контроля скрипта(проверял в CMD и VBS), а скрипт продолжает свою работу: очищает или удаляет временные папки и файлы, соответственно работа программы завершается. Нашел выход в следующем: после строки запуска поставил цикл в котором отслеживается PID программы пока она находится в процессах, но не могу понять, как получить errorlevel для заключительных операций. Запуск может проходить сразу с нескольких флешек. Донести проблему до разработчика нереально - скорее всего аутсорсинг. Может кто знает как получить код возврата, отпишитесь пожалуйста.

Iska 24-03-2020 12:04 2914467

Unter, расскажите то же самое, только теперь предметно.

Unter 24-03-2020 23:39 2914568

Проще говоря, можно как нибудь получить код возврата программы, если скрипт не ждет ее завершения.

Iska 25-03-2020 00:42 2914575

Unter, первый вопрос — как он определит момент, когда пора получать код возврата?

Вы явно не тем занимаетесь. Надо решать:
Цитата:

Цитата Unter
Некоторое время назад после очередного обновления, программа стала реагировать на состояние USB портов. Если в порт что то вставить или вынуть, она уходит из под контроля скрипта »


Unter 25-03-2020 08:35 2914593

Цитата:

Цитата Iska
как он определит момент, когда пора получать код возврата »

Цитата:

Цитата Unter
после строки запуска поставил цикл в котором отслеживается PID программы пока она находится в процессах »

Как уже писал выше: "Донести проблему до разработчика нереально". И предупреждая следующий вопрос, проблема не в компьютере и не в Windows. Проверял на 10-ке и 7-ке, хотя поначалу грешил на 10 и даже Microsoft потревожил, но затем проверил на других компьютерах и убедился, что виновата программа. Возможно есть способ выгрузить код в файл.

Iska 25-03-2020 08:59 2914596

Unter, покажите Ваш код, в котором:
Цитата:

Цитата Unter
она уходит из под контроля скрипта(проверял в CMD и VBS), »


Unter 26-03-2020 02:16 2914719

Спасибо всем кто пытался разобраться в моей "компетентности". Я нашел решение, возможно временное, но рабочее. Оно вытекает из логики запуска данного приложения. Запуск происходит EXE файлом небольшого размера, который делает первичные проверки и настройки и запускает рядом лежащий файл, который на самом деле является основным исполняемым модулем и прекрасно запускается через start. Видимо стартовый экзешник зачем то сканирует состояние USB устройств и при этом либо закрывается(пока не проверял), либо меняет свое состояние и скрипт начинает считать, что программа завершила работу, хотя основной модуль находится в памяти. Эх если бы это разработчикам донести.

YuS_2 26-03-2020 08:09 2914726

Цитата:

Цитата Unter
Спасибо всем кто пытался разобраться в моей "компетентности". »

Дело не в "разбирательствах о компетентности". Просто анализ выданной информации и поиск решения, будет сродни "гаданию на кофейной гуще" и результат, естественно, получится соответствующий... он такой нужен вам? :)
Как минимум, необходимо увидеть строку:
Цитата:

Цитата Unter
Запуск идет через батник »

т.е. не предварительные действия, по формированию среды и каталогов, а именно запуск программы, а также, надо бы уточнить, более конкретные действия, которые должны выполняться по завершению программы...
а вообще, в cmd, есть команда start, у которой есть ключ WAIT
Цитата:

WAIT Запуск приложения с ожиданием его завершения.
или же, непосредственный запуск программы, тоже должен происходить с ожиданием завершения, т.е. скрипт, от строки запуска, не будет выполняться пока не завершится та программа.

Unter 26-03-2020 09:37 2914738

Идет именно формирование среды - переменная %TEMP% и каталоги в ней ну и неужели вы думаете что я про старт /wait не знаю, хотя в батниках можно и без нее обходиться. Ну а в VBS запуск шел через CreateObject("WScript.Shell").run

Iska 26-03-2020 09:58 2914740

Unter, причём тут Ваша компетентность? Речь идёт о воспроизводимости.

YuS_2 26-03-2020 11:58 2914753

Цитата:

Цитата Unter
ну и неужели вы думаете что я про старт /wait не знаю »

Понимаете, телепатия - моя не самая сильная сторона, а гадания на кофейной гуще очень плохо получаются... :)
"Секретную" строчку Вы показывать не желаете... соответственно, помочь вам, пока нечем. Ну, кроме как поговорить на общие темы... но это уже во флейм.

Wolf_46 27-03-2020 11:12 2914830

Здравствуйте.
Предстоит на большом количестве ПК с winXP/7 удаленно поменять в параметрах соединения шлюз и днс.
Решение вижу следующим:
-получить имя соединения
команда
Код:

wmic path Win32_NetworkAdapter where NetConnectionStatus="2" get NetConnectionID | find "одключ"
выдает то что нужно

-используя полученное имя соединения, при помощи команды netsh внести необходимые изменения

Но по какой-то причине < wmic path Win32_NetworkAdapter where NetConnectionStatus="2" get NetConnectionID | find "одключ" > в bat-нике работает некорректно:
Код:

setlocal ENABLEDELAYEDEXPANSION
FOR /F "usebackq delims=" %%a IN ('wmic path Win32_NetworkAdapter where NetConnectionStatus="2" get NetConnectionID ^| find "одключ"') DO (set result=%%a)
echo %result%


Подскажите, как поправить чтобы корректно работал.

Iska 27-03-2020 12:22 2914842

Цитата:

Цитата Wolf_46
Но по какой-то причине < wmic path Win32_NetworkAdapter where NetConnectionStatus="2" get NetConnectionID | find "одключ" > в bat-нике работает некорректно: »

Например, по причине не той кодировки пакетного файла. У Вашего пакетного файла она какая?

И при использовании квалификатора «usebackq» используйте такие: `…` кавычки для команды, а не такие: '…'.

Wolf_46 27-03-2020 13:34 2914849

Кодировка файла - 866

кавычки поправил, результат:
Код:

c:\Users\user\Desktop>5.bat

c:\Users\user\Desktop>setlocal ENABLEDELAYEDEXPANSION

c:\Users\user\Desktop>FOR /F "usebackq delims=" %a IN (`wmic path Win32_NetworkA
dapter where NetConnectionStatus "2" get NetConnectionID | find "одключ"`) DO (s
et result=%a )
Invalid Verb.

c:\Users\user\Desktop>echo
Режим вывода команд на экран (ECHO) включен.


Iska 27-03-2020 16:56 2914860

Wolf_46, ещё раз покажите Ваш код (нынешний, исправленный).

Wolf_46 27-03-2020 22:48 2914898

Код:

setlocal ENABLEDELAYEDEXPANSION
FOR /F "usebackq delims=" %%a IN (`wmic path Win32_NetworkAdapter where NetConnectionStatus="2" get NetConnectionID ^| find "одключ"`) DO (set result=%%a)
echo %result%


iglezz 27-03-2020 23:00 2914903

Wolf_46, А если так?
Код:

setlocal ENABLEDELAYEDEXPANSION
FOR /F "usebackq delims=" %%a IN (`wmic path Win32_NetworkAdapter where NetConnectionStatus^="2" get NetConnectionID ^| find "одключ"`) DO (set result=%%a)
echo %result%

Оказывается, символ '=' тоже надо экранировать...
Код:

FOR /F "usebackq delims=" %%a IN (`echo =4=4=`) DO (set result=%%a )
echo result:%result%

выводит
Код:

result:4 4

Iska 27-03-2020 23:06 2914906

Попробуйте так:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (`wmic.exe NIC where "NetConnectionStatus = 2" get NetConnectionID ^| find.exe /i "Беспроводное"`) do set sResult=%%i
if defined sResult (
        echo [%sResult%]
) else (
        echo Can't find [Беспроводное] in NICs.
)

endlocal
exit /b 0

Цитата:

Цитата iglezz
Оказывается, символ '=' тоже надо экранировать... »

Не надо. Достаточно заключать в кавычки условие.

Wolf_46 28-03-2020 19:53 2914964

iglezz, Iska, спасибо!, оба Ваши варианта работают. :up

Александр.Курашов@vk 24-12-2020 17:08 2944071

F как сие сделать с результатом вывода api в curl?

Iska 24-12-2020 18:20 2944080

Покажите, что у Вас есть сейчас.


Время: 10:19.

Время: 10:19.
© OSzone.net 2001-