Перенаправление вывода appcmd в переменную

Я пытаюсь запустить следующее:

FOR /F "tokens=* delims=" %A IN ('C:\windows\system32\inetsrv\appcmd.exe list app /site.name:"car" /xml | C:\windows\system32\inetsrv\appcmd.exe list vdir /vdir.name:"car/" /text:physicalPath') DO SET Variable=%A

Но получите следующую ошибку:

| was unxepected at this time

2 ответа

Решение

Если данные должны передаваться из процесса в другой, вам необходимо экранировать символ канала. Так должно быть ^|

Если вам нужно выполнить обе команды, замените символ канала на ^&, оператор конкатенации команд также сбежал

Для тех, кто достигает этого, ниже приведен рабочий пример пакетного файла для получения физического пути к сайту iis, хранящегося в переменной с именем «physicalPath». Это основано на объяснениях @StuHarper в комментариях.

      @echo off
set site=stackoverflow.com
set site=%site:https://=% 
set site=%site:http://=% 
set site=%site: =%

set appcmd=%systemroot%\system32\inetsrv\AppCmd.exe
set xmlOutput=%appcmd% list app /site.name:%site% /path:"/" /xml

for /f "tokens=*" %%A in ('%xmlOutput% ^| %appcmd% list vdir /in /text:physicalPath') DO SET physcalPath=%%A

echo physcalPath: %physcalPath%
@echo on




Другие вопросы по тегам