Обработка ответа команды в Windows Bash - PullRequest
0 голосов
/ 18 сентября 2018

Я пишу bash-скрипт, который должен перезапустить запущенный процесс. Я могу убить процесс, используя имя процесса (pcm.exe). Однако когда я хочу запустить процесс, я хочу, чтобы он получил расположение pcm.exe из ранее запущенного процесса. Это потому, что я точно не знаю, где находится программа в разных системах.

У меня есть следующий скрипт:

wmic process where "name='pcm.exe'" get ExecutablePath /FORMAT:LIST
@taskkill /f /im pcm.exe >nul
@timeout /t 10 /nobreak >nul
@start h:/pandora/pcm.exe >nul

wmic успешно получает местоположение PCM:

ExecutablePath=H:\Pandora\PCM.exe

Но как я могу передать ответ на строку и запустить @start (путь)?

1 Ответ

0 голосов
/ 01 апреля 2019

TL; DR -

Используйте команду set

Подробности:

setlocal EnableDelayedExpansion

set "zTargetImage=notepad.exe"
set "zBinLocation=0"

for /f "skip=2 tokens=2 delims=," %%A in ('wmic process where "name='!zTargetImage!'" get ExecutablePath^,ThreadCount /format:csv 2^>^&1') do (
    set "zBinLocation=%%A"
)

taskkill /f /im !zTargetImage! >nul 2>&1
timeout /t 2 /nobreak >nul
if not "!zBinLocation!"=="0" (
    start "" "!zBinLocation!" >nul
)
...