追加のソフトウェアをインストールできないクライアントPCのいくつかの問題をトラブルシューティングする必要があり、Windows XPおよび7でのawk
のいくつかの基本機能が必要です。
基本的に、netstat
からプロセスIDを取り除く必要があるので、スクリプトのさまざまな部分でその行を使用できますが、awk '{ print $4 }'
と同等のことができるネイティブコマンドの知識がありません。何かオプションはありますか?明らかに、私はwindows cliにかなり新しいです。
プロセスID(PID)を取得するには:
tasklist /fi "imagename eq netstat.exe" > D:\test.txt
このコマンドは、プロセスIDがnetstatの新しいテキストファイルを作成します(netstatが実行されている場合)。
問題は、このファイルにはPID以外のものが含まれることです。
たぶんそれであなたが始めるのに十分ですか?
このような基本的なタスクには、 for /f
を使用できます。
の代わりに
command | awk '{ print $4 }'
これを試して:
for /f "tokens=4" %a in ('command') do echo %a
バッチファイルでは%%a
ではなく%a
を使用する必要があることに注意してください。
netstat -n -o
の出力例:
Active Connections
Proto Local Address Foreign Address State PID
TCP 127.0.0.1:12345 127.0.0.1:23456 ESTABLISHED 4321
TCP 127.0.0.1:34567 127.0.0.1:45678 ESTABLISHED 5432
上位2行を削除するには、出力をfindstr /v "Active Proto"
にパイプします。
ローカルアドレスやPIDなど、特定の列データのみを印刷するには、次のコマンドを使用します。
for /f "tokens=2,5" %i in ('netstat -n -o ^| findstr /v "Active Proto"') do @echo Local Address = %i, PID = %j
バッチファイルで使用する場合は、%記号を2倍にする必要があり、必要な値(%% i、%% jなど)を変数に割り当てることができます。
@Dennisの回答について詳しく説明すると、Cヘッダーファイルからバージョン番号を抽出し、それを使用して新しいファイル名を作成するために使用したスニペットを次に示します。
私のヘッダーファイルは次のようになります
... stuff
#define FIRMWARE 8
.. stuff
UNIXと同等
f=`awk /FIRMWARE/ { print "image_v" $3 ".txt"; } project_config.`
echo $f
dOSでは
for /f "tokens=3" %%a in ('findstr FIRMWARE project_config.h') do (
set f=image_v%%a.txt
)
echo %f%