PDA

Показать полную графическую версию : [решено] Как записать в переменную результат выполнения команды?


Страниц : [1] 2 3 4

MSI
14-02-2009, 18:11
Мне необходимо что-то подобное:

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

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

Petya V4sechkin
14-02-2009, 18:14
%COMPUTERNAME% - стандартная переменная.

MSI
14-02-2009, 18:25
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!

MSI
14-02-2009, 18:50
Petya V4sechkin, Благодарю!

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

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

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

kyi13
12-07-2013, 11:54
Добрый день!
Нашел эту ветку на форуме, т.к. вопрос похожий, но посложнее.
Есть вот такие строки

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
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%

Farxat
03-04-2014, 17:05
Дабы не создавать лишние темы спрошу здесь) Есть скрипт в котором именно с первого раза не выводятся данные при применении команды 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
UPD: Вывел на прямую %%i и %%j и проблема ушла.

Georgio
03-04-2014, 17:50
@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
Спасибо за совет!


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


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

Iska
03-04-2014, 18:22
Устройте пожалуйста небольшой ликбез по ^^^ в данном случаи и ! вместо % »
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.

Iska
23-11-2015, 22:14
Вывод идёт в 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
Осталось извлечь ПЕРВОЕ значение.

Iska
23-11-2015, 23:12
Попробуйте так:
@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