Показать полную графическую версию : [решено] Как записать в переменную результат выполнения команды?
Мне необходимо что-то подобное:
%переменная% := (результат команды hostname), чтобы можно было использовать значение переменной дальше в скрипте...
Сейчас на ум приходит только hostname > file.ext , с последущим вычитыванием имени компьютера...
Petya V4sechkin
14-02-2009, 18:14
%COMPUTERNAME% - стандартная переменная.
Petya V4sechkin, благодарю с переменной %COMPUTERNAME% результат достигнут.
Сразу проверить как-то не решился - результаты выполнения hostname и set computername несколько разнятся - это и смутило...
А все-таки, можно ли в переменную "заталкивать" результат выполнения команды?
Petya V4sechkin
14-02-2009, 18:32
А все-таки, можно ли в переменную "заталкивать" результат выполнения команды?
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
For /F "Delims=" %%I In ('Hostname') Do Set V=%%~I
Echo !V!
Petya V4sechkin, Благодарю!
Если можно, хочу уточнить в чем разница между Echo !V! и Echo %V% ?
Petya V4sechkin
14-02-2009, 20:36
MSI, !V! - связывание времени выполнения (включается с помощью EnableDelayedExpansion). Подробнее можно почитать в описании команды Set:
set /?
Вообще в вашем примере работает и %V% (потому что подстановка значения не происходит внутри цикла (For) или условия (If)).
Добрый день!
Нашел эту ветку на форуме, т.к. вопрос похожий, но посложнее.
Есть вот такие строки
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 я из переменной вытащу что мне необходимо.
Подскажите как это можно реализовать?
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
Не буду плодить темы, напишу сюда
есть команда 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
@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%
Дабы не создавать лишние темы спрошу здесь) Есть скрипт в котором именно с первого раза не выводятся данные при применении команды 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) отключен
Второй раз получаю значение переменной.
UPD: Вывел на прямую %%i и %%j и проблема ушла.
@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^^^!)
)
)
Спасибо за совет!
@echo (!base_n! _ !base_rel!!_pass^^^!)
Устройте пожалуйста небольшой ликбез по ^^^ в данном случаи и ! вместо %
Устройте пожалуйста небольшой ликбез по ^^^ в данном случаи и ! вместо % »
setlocal /?
+ Как экранировать символ? (http://www.rsdn.ru/article/winshell/batanyca.xml#ENB)
rectator
23-11-2015, 22:01
Чтобы не плодить темы, спрошу здесь.
Как присвоить переменной в батнике результат выполнения команды?
Команда возвращает следующее:
...
(bootloader) OPEN_ME572CL_V11.8.0.157.1
OKAY [ 0.862s]
finished. total time: 0.862s
Мне нужно вот это OPEN_ME572CL_V11.8.0.157.1 присвоить переменной. Вывод идёт в STDERR.
Вывод идёт в STDERR. »
При разборе по «for /f» перенаправить вывод stderr в stdout, наподобие:
for /f "usebackq delims=" %%i in (
`2^>^&1 "команда"`
) do echo %%i
Мне нужно вот это OPEN_ME572CL_V11.8.0.157.1 присвоить переменной. »
По каким признакам выделяем эту строку и этот текст среди прочего вывода?
rectator
23-11-2015, 22:22
По каким признакам выделяем эту строку и этот текст среди прочего вывода? »
По признаку (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
Осталось извлечь ПЕРВОЕ значение.
Попробуйте так:
@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
Через запись в файл сделать получилось и всё работает.
Ваш вариант работать не хочет, хотя команда проходит.
P.S. Сделал, всё оказалось просто:
FOR /F "tokens=2" %%a IN ('fastboot getvar version 1^>nul 2^>^&3') do set build=%%a & goto :ver
:ver
echo "%build%"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.