在Windows bash中处理命令响应

时间:2018-09-18 11:56:05

标签: windows wmic

我正在编写一个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 :(得分:0)

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
)