присвоение переменной результат команды (bat'ник)
Ребята, подскажите пожалуйста,
мне нужно что бы переменной был присвоен результат виполнения какой-нибудь комманды, к примеру, [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'нике?
Код:
for /?
Результаты выполнения команд можно загнать в переменную только с помощью цикла for с ключом /f. Или через временный файл, но это если совсем тяжелый случай.
Цитата: 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="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], но я никак не могу подобрать подходящие.
Код:
@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 /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 обрабатывать.
прийдется наверное как-то обойтись без этого.
Но, за помощь, 01MDM тебе огромное спасибо, может все же прийдется воспользоваться твоим примером.
Цитата: kotelius
... не ожидал я, что будет все так плохо...
Воспользуйтесь WSH + VBS|JS. Возможностей будет неизмеримо больше, чем в пакетных файлах.
Цитата: Dmitrii
Воспользуйтесь WSH + VBS|JS. Возможностей будет неизмеримо больше, чем в пакетных файлах.
Dmitrii спасибо за совет. Сегодня посмотрел что из себя представляет WSH, интересная вещь, я раньше о нем слыхал, но пользоватся им не приходилось.
Я, в общем-то, решил реализовать свою задачу с помощью Cygwin'a, но думаю и знания WSH'a не помешают :)
Спасибо.