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

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

Ответить
Настройки темы
CMD/BAT - результат команды в переменную

Новый участник


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

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


Здравствуйте!Подскажите, пожалуйста, как можно занести результат выполнения команды в переменную?
Делаю следующим образом:
Код: Выделить весь код
setlocal enabledelayedexpansion
FOR /F "usebackq delims=" %%a IN (`handle.exe -accepteula`) DO (
             set result=%%a
)
echo %result%
Но в итоге в result только последняя строка вывода(
Подскажите, пожалуйста, что нужно подправить?

Отправлено: 15:40, 17-09-2015

 

Ветеран


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

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


Никак. Не надо «заносить результат выполнения команды в переменную», надо сразу производить потребные действия над каждой строкой вывода — там, где у Вас находится «set result=%%a».

Отправлено: 17:34, 17-09-2015 | #2



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

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


Ветеран


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

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


А почему так нельзя:
Код: Выделить весь код
@echo on
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%a in (`handle.exe -accepteula`) do (
 set result=%%a
 echo !result!
)
pause
.

Отправлено: 21:36, 20-09-2015 | #3


Ветеран


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

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


Цитата alpap:
А почему так нельзя: »
Потому что неизвестно, что на самом деле автору нужно вместо прозаичного «занести результат выполнения команды в переменную».

Отправлено: 23:36, 20-09-2015 | #4


Ветеран


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

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


alpap, В переменную заносится только одна строка, сначала первая, потом вторая ... потом последняя. Поэтому нужно либо обрабатывать вывод сразу в цикле, либо отфильтровывать нужную строку, либо заносить в разные переменные. Покажите вывод:
Код: Выделить весь код
handle.exe -accepteula
И опишите, что конкретно вам нужно взять в переменную

Отправлено: 00:04, 21-09-2015 | #5


Ветеран


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

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


Foreigner, да Вы перепутали это не мне и я то знаю, тоже хотел помочь чем-то BreakHeart, может ему просто вывод достаточно увидеть и ничего обрабатывать он и не собирается, разные задачи бывают.

Отправлено: 00:26, 21-09-2015 | #6


Ветеран


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

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


alpap, Извиняюсь, невнимательно посмотрел. Но и в вашем примере можно просто сделать echo %%a, т.е. переменная result явно лишняя. Если надо сохранить весь вывод можно создать массив переменных, например:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion

set cnt=100
for /f "tokens=*" %%i in ('dir /b') do call:set "%%i"
for /f "tokens=2 delims==" %%i in ('set var_') do echo %%i

echo.
echo %var_101% первый элемент
echo %var_102% второй
echo !var_%cnt%! последний
goto:eof

:set
set /a cnt+=1
set "var_%cnt%=%~1"
Но без реального вывода handle.exe, это лишь пример... Могут быть нюансы

Отправлено: 00:50, 21-09-2015 | #7


Новый участник


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

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


handle.exe - это программа из набора sysinternals, которая выводит список процессов и к каждому процессу хендл, который он держит. проблема в том что сначала идет строка с именем процесса, а потом список хенделов открытых процессов. мне нужно посмотреть есть ли нужный хендл и если есть, то вывесть имя процесса. есть вариант сначала записать в файл, потом пройтись find по файлу, но сразу возникает вопрос как определить нашел ли find нужную строку или нет?

Отправлено: 10:10, 21-09-2015 | #8


Ветеран


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

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


Цитата BreakHeart:
мне нужно посмотреть есть ли нужный хендл »
Ну, так и смотрите именно его, указав полный путь, например:
Код: Выделить весь код
C:\Out>handle /accepteula "C:\Out\Untitled.FR10.pdf"

Handle v3.46
Copyright (C) 1997-2011 Mark Russinovich
Sysinternals - www.sysinternals.com

AcroRd32.exe       pid: 4564   type: File           1C0: C:\Out\Untitled.FR10.pdf
Примерная болванка:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourcePath=C:\Out\Untitled.FR10.pdf
set sProcessName=

for /f "usebackq" %%i in (
	`handle.exe /accepteula "%sSourcePath%" ^| find.exe /i "%sSourcePath%"`
) do (
	set sProcessName=%%i
)

if defined sProcessName (
	echo [%sProcessName%]
) else (
	echo Nothing found
)

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

Отправлено: 10:57, 21-09-2015 | #9


Ветеран


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

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


BreakHeart, Может лучше сразу искать по нужному хэндлу? Например, запустил mp3 в консольном noisy.exe (такой проигрыватель):
Код: Выделить весь код
noisy "D:\test\05 - Smoke on the Water.mp3"
Ищу кто держит файл:
Код: Выделить весь код
> handle "05 - Smoke" | findstr "pid"
Noisy.exe          pid: 5492   type: File           310: D:\test\05 - Smoke on the Water.mp3
Из полученной строки можно взять pid процесса и дескриптор файла, чтобы его отцепить:
Код: Выделить весь код
handle -p 5492 -c 310 -y
ЗЫ. Для закрытия необходима админская консоль

Последний раз редактировалось Foreigner, 21-09-2015 в 11:25.


Отправлено: 11:20, 21-09-2015 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как записать в переменную результат выполнения команды? MSI Скриптовые языки администрирования Windows 64 24-12-2020 18:20
CMD/BAT - [решено] Вычислить размер системного диска и результат подставить в переменную DR_WELL Скриптовые языки администрирования Windows 1 10-01-2014 09:03
MySQL - [решено] Как узнать результат команды SELECT Apock Программирование и базы данных 4 09-02-2013 23:23
CMD/BAT - [решено] Строка результат выполнения filever.exe передать в переменную dARKest Скриптовые языки администрирования Windows 3 07-09-2009 22:50
[решено] Объединить результат mysql_fetch_array() в одну переменную D_Master Вебмастеру 9 10-07-2009 17:23




 
Переход