コードのセクションがあります。
:check
for /f "tokens=1* delims==" %%A in ('"wmic process get description, commandline /format:list"') do (
if "%%A"=="CommandLine" (
set "cmd=%%B"
) else if "%%A"=="Description" (
set "desc=%%B"
setlocal enableDelayedExpansion
set "desc=!desc:~0,-1!"
set "cmd=!cmd:~0,-1!"
if /i !desc! == %1 (
echo !cmd! >>C:\test.txt
)
endlocal
)
)
goto:eof
これはほとんど機能します(これは実際にはバッチファイル内から呼び出される関数です。
call:check processname1.exe
call:check processname2.exe
call:check processname3.exe
etc...
私がやりたいこと (可能であれば) は、ファイルにエコーする代わりに、2 つの変数を作成できるようにしたいということです。何かのようなもの;
processname1.exe processname3.exe <-- (for each process 'checked' if it IS running, append its name to this variable)
commandlinepath1 commandlinepath2 <-- (for each process 'checked' if it IS running, append its path to this variable)
これが可能で、後でスクリプトでこれらの変数を呼び出すことができる場合は、実行中のプロセスを tskill できるようにしたいと思います (上記の変数を作成できれば十分に簡単です)。プロセス (元のパスにあったコマンド ライン パラメータを使用します。ここで迷子になります。
上記の私のコード(ファイルへの書き込み)。次のような結果が得られます。
"C:\somefolder\someexe.exe" -some_parameter
"C:\some therfolder\someotherexe.exe"
"C:\another older\anotherexe.exe" param1 param2
しかし、私がする必要があるのは、このファイル(または可能であれば変数)の各行を取得して実行することです(各行をWindowsのRUNコマンドにコピーすると機能しますが、CMDを介して実行すると機能しません) .
for ループを使用してファイルを開くことを試みましたが、スクリプトが続行する前にプロセスが終了するのを待機することを除いて、そうです (これらのプロセスはアプリケーションであるため、終了しません)。START .. を使用しようとすると、新しい CMD ウィンドウが読み込まれますか??
私がする必要があるのは(より良いオプションがある場合)です
- 事前に決定された一連のプロセスについて、それらが実行されているかどうかを確認します
- あるものを殺します(そうでない場合は無視してください)
- いくつかのファイルを削除します(私はこれを行うことができます。プロセスを強制終了する理由は、プロセスがファイルを開いたままにし、削除を妨げているためです)
- 最初に実行していたすべてのプログラムを再度開きます
ありがとう..