Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

присвоение переменной результат команды (bat'ник)

22K
25 июня 2009 года
kotelius
75 / / 08.08.2008
Всем доброго времени суток.

Ребята, подскажите пожалуйста,
мне нужно что бы переменной был присвоен результат виполнения какой-нибудь комманды, к примеру, [COLOR="Blue"]dir[/COLOR].
Должно быть что-то по типу как в Unix shell'e:
[COLOR="Red"]a[/COLOR]=`[COLOR="DarkRed"]cd[/COLOR] [COLOR="Green"]$MYPATH[/COLOR]; [COLOR="#8b0000"]ls -l[/COLOR]`

Возможно ли такое реализовать в bat'нике?
22K
25 июня 2009 года
01MDM
49 / / 07.06.2007
 
Код:
for /?


Результаты выполнения команд можно загнать в переменную только с помощью цикла for с ключом /f. Или через временный файл, но это если совсем тяжелый случай.
22K
25 июня 2009 года
kotelius
75 / / 08.08.2008
Цитата: 01MDM
 
Код:
for /?


Ну на счет for'a я знал, просто я думал может есть еще какой-нить вариант.
Что касаеться for'a, то я накидал такой примерчик:

 
Код:
[COLOR="Magenta"]@echo off[/COLOR]

[COLOR="Green"]for[/COLOR] /f "tokens=*" [COLOR="Blue"]%%i[/COLOR] in ('[COLOR="Purple"]cmd.exe[/COLOR] /c [COLOR="Green"]dir[/COLOR]') [COLOR="Green"]do[/COLOR] (
[COLOR="#008000"]set[/COLOR] myvar=[COLOR="#0000ff"]%%i[/COLOR]
)
[COLOR="#008000"]echo[/COLOR] [COLOR="#0000ff"]%myvar%[/COLOR]

но, здесь есть один нюанс - во время выполнения этого цикла в переменную [COLOR="Blue"]%%i[/COLOR] поочередно записываются строки, полученные при выполнении [COLOR="Green"]dir[/COLOR], и соответственно в конечном результате получается, что [COLOR="Blue"]%%i[/COLOR] равно последней строке, в то время как, мне необходимо чтобы она равнялась [COLOR="Red"]всему оутпуту[/COLOR] команды [COLOR="Green"]dir[/COLOR].
Возможно ли такое? Если да, то я предполагаю что это зависит от опций [COLOR="Green"]for'a[/COLOR], но я никак не могу подобрать подходящие.
22K
25 июня 2009 года
01MDM
49 / / 07.06.2007
Не представляю зачем это может пригодиться. А так cmd.exe не поддерживает операции с массивами. Можно создать псевдомассив, например:

 
Код:
@echo off

for /f "tokens=*" %%i in ('dir /b /s C:\*.mp3') do call:set "%%i"
set mp3file_
goto:eof

:set
set /a cnt+=1
set "mp3file_%cnt%=%~1"


И потом этот "массив", опять же, через for обрабатывать.
22K
25 июня 2009 года
kotelius
75 / / 08.08.2008
мдаааа, не ожидал я, что будет все так плохо :confused:
прийдется наверное как-то обойтись без этого.
Но, за помощь, 01MDM тебе огромное спасибо, может все же прийдется воспользоваться твоим примером.
405
26 июня 2009 года
Dmitrii
554 / / 16.12.2004
Цитата: kotelius
... не ожидал я, что будет все так плохо...

Воспользуйтесь WSH + VBS|JS. Возможностей будет неизмеримо больше, чем в пакетных файлах.

22K
26 июня 2009 года
kotelius
75 / / 08.08.2008
Цитата: Dmitrii
Воспользуйтесь WSH + VBS|JS. Возможностей будет неизмеримо больше, чем в пакетных файлах.



Dmitrii спасибо за совет. Сегодня посмотрел что из себя представляет WSH, интересная вещь, я раньше о нем слыхал, но пользоватся им не приходилось.
Я, в общем-то, решил реализовать свою задачу с помощью Cygwin'a, но думаю и знания WSH'a не помешают :)
Спасибо.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог