2

「test.exe」という名前のすべてのプログラムの使用済みメモリをバッチスクリプトで合計したいと思います。次のコマンドを使用して、適切なすべてのプロセスのメモリ使用量を取得できます。

C:\> wmic process where name="test.exe" get workingsetsize | findstr /v "WorkingSetSize"
55758848
66174976

したがって、これらすべての値をFORループで合計したいと思います。次のコマンドはi変数を表示するだけですが、それでもエラーが追加されます。

C:\> for /F %i IN ('wmic process where name="test.exe" get workingsetsize ^| findstr /v "WorkingSetSize"') DO echo %i
 test.exe - Invalid alias verb.

そのコマンドを変更して、使用されているすべてのメモリを合計して出力するにはどうすればよいですか。CMDで機能する必要があります。できれば、私のコマンドと非常によく似ています。

ありがとう

4

1 に答える 1

7

=はトークン区切り文字であり、バッチパーサーによって削除されているため、FORステートメントは失敗します。としてエスケープすると機能し^=ます。

WMICには、出力がパイプ処理されるたびに、出力の各行の最後に追加のキャリッジリターン文字(0x0D)が含まれ、さらに出力の最後に追加の行が含まれるという不幸な「機能」があります。これにより、FORループ内の余分な不要な行で問題が発生する可能性があります。ヘッダー行がない代わりに少なくとも1桁を探すようにFINDSTRを変更することで、状況を簡単に解決できます。

合計を取得するには、ループでSET / Aを使用するだけです(最初にSUM変数を初期化した後)。

>set SUM=0
>for /F %i IN ('wmic process where name^="test.exe" get workingsetsize ^| findstr "[0-9]"') DO set /a SUM+=%i

However - math in Windows CMD is limited to 32bit signed integer support. Your sum could easily exceed the maximum allowed value of 2,147,483,647. You would be better off using PowerShell, or else CSCRIPT to execute a VBS or JScript program. All of those alternatives support long integers (64 bit).

于 2012-04-17T21:18:40.793 に答える