Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как записать в переменную результат выполнения команды?

Ответить
Настройки темы
CMD/BAT - [решено] Как записать в переменную результат выполнения команды?
MSI MSI вне форума

Пользователь


Сообщения: 60
Благодарности: 2

Профиль | Отправить PM | Цитировать


Мне необходимо что-то подобное:

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

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

Отправлено: 18:11, 14-02-2009

 

Аватара для Farxat

Пользователь


Сообщения: 101
Благодарности: 0

Профиль | Отправить PM | Цитировать


Дабы не создавать лишние темы спрошу здесь) Есть скрипт в котором именно с первого раза не выводятся данные при применении команды 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) отключен
Второй раз получаю значение переменной.

-------
Сила в единстве, единство в вере!


Отправлено: 17:05, 03-04-2014 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Farxat

Пользователь


Сообщения: 101
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

-------
Сила в единстве, единство в вере!


Отправлено: 17:23, 03-04-2014 | #12


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@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^^^!)
   )
 )

Последний раз редактировалось Georgio, 03-04-2014 в 18:12.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:50, 03-04-2014 | #13


Аватара для Farxat

Пользователь


Сообщения: 101
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

-------
Сила в единстве, единство в вере!


Отправлено: 18:04, 03-04-2014 | #14


Ветеран


Contributor


Сообщения: 25110
Благодарности: 7298

Профиль | Отправить PM | Цитировать


Цитата Farxat:
Устройте пожалуйста небольшой ликбез по ^^^ в данном случаи и ! вместо % »
Код: Выделить весь код
setlocal /?
+ Как экранировать символ?
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:22, 03-04-2014 | #15


Аватара для rectator

Пользователь


Сообщения: 71
Благодарности: 3

Профиль | Отправить PM | Цитировать


Чтобы не плодить темы, спрошу здесь.
Как присвоить переменной в батнике результат выполнения команды?
Команда возвращает следующее:
Код: Выделить весь код
...
(bootloader) OPEN_ME572CL_V11.8.0.157.1
OKAY [  0.862s]
finished. total time: 0.862s
Мне нужно вот это OPEN_ME572CL_V11.8.0.157.1 присвоить переменной. Вывод идёт в STDERR.

Отправлено: 22:01, 23-11-2015 | #16


Ветеран


Contributor


Сообщения: 25110
Благодарности: 7298

Профиль | Отправить PM | Цитировать


Цитата 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 присвоить переменной. »
По каким признакам выделяем эту строку и этот текст среди прочего вывода?
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:14, 23-11-2015 | #17


Аватара для rectator

Пользователь


Сообщения: 71
Благодарности: 3

Профиль | Отправить PM | Цитировать


Цитата 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
Осталось извлечь ПЕРВОЕ значение.

Последний раз редактировалось rectator, 23-11-2015 в 23:08.


Отправлено: 22:22, 23-11-2015 | #18


Ветеран


Contributor


Сообщения: 25110
Благодарности: 7298

Профиль | Отправить PM | Цитировать


Попробуйте так:
Код: Выделить весь код
@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», возможно, смогу проверить.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:12, 23-11-2015 | #19


Аватара для rectator

Пользователь


Сообщения: 71
Благодарности: 3

Профиль | Отправить PM | Цитировать


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

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

P.S. Сделал, всё оказалось просто:
Код: Выделить весь код
FOR /F "tokens=2" %%a IN ('fastboot getvar version 1^>nul 2^>^&3') do set build=%%a & goto :ver
:ver
echo "%build%"

Последний раз редактировалось rectator, 24-11-2015 в 00:00.


Отправлено: 23:26, 23-11-2015 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как записать в переменную результат выполнения команды?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Записать имя папки в которой лежит батник в переменную а потом эту же папку переим. bobr95 Скриптовые языки администрирования Windows 8 10-04-2012 18:42
CMD/BAT - [решено] Как определить IP и записать его в переменную? (OS: Windows Vista) Voshal Скриптовые языки администрирования Windows 7 17-05-2010 11:43
CMD/BAT - [решено] Строка результат выполнения filever.exe передать в переменную dARKest Скриптовые языки администрирования Windows 3 07-09-2009 22:50
[решено] Объединить результат mysql_fetch_array() в одну переменную D_Master Вебмастеру 9 10-07-2009 17:23
bash: Как выполнить многострочный результат другой команды shivtorov Общий по Linux 12 04-10-2005 10:20




 
Переход