FORコマンドで遊んでみる。2008年08月04日 01時52分38秒

いや、実用性はないんだけども、前のエントリで覚えたばかりのFORコマンドと、ちょっと前に作ったなんちゃってコマンドを組み合わせて遊んでみたり。

chkconfig.jsの--detailを連続で

chkconfig.jsにオマケでつけてた--detailオプション、サービス名を指定しないと使えない仕様なんだけども、これをFORコマンドと組み合わせて使ってみると。

コマンドラインからcscript付きで指定するとちょっと冗長なので、ラッパーのバッチファイルを作っておくことにしよう。こんな感じで、「chkconfig.bat」とか「chkconfig.cmd」とか。

@echo off
cscript //nologo "%~dP0\scripts\chkconfig.js" %*

dara-jは特定のディレクトリにバッチ(というか.cmdファイル。単なる好みだけど)を設置することにしていて、そこにサブディレクトリ「scripts」を切って.jsはそこに置くようにしているので、chkconfig.jsのパス指定で「%~dP0\scripts\」としている。んで、バッチをおいたディレクトリにパスを通している。

で、chkncofig --listでサービスを列挙した後にfindstr Manualで手動起動設定になっているサービスのみに絞り込んで、それらに対してchkconfig --detailを適用してみる。

C:\Documents and Settings\dara-j>for /f "tokens=1" %d in ('"chkconfig --list | f
indstr Manual"') do @chkconfig --detail %d
サービス名 : AppMgmt
表示名     : Application Management
スタートアップの種類 : 手動
状態       : 停止中
説明 :
  割り当て、公開、削除などのソフトウェアのインストール サービスを供給します。

サービス名 : aspnet_state
表示名     : ASP.NET 状態サービス
スタートアップの種類 : 手動
状態       : 停止中
説明 :
  ASP.NET の out-of-process セッション状態のサポートを提供します。このサービスが
中止されると out-of-process 要求は処理されません。このサービスが無効になると、こ
のサービスに明示的に依存しているサービスはすべて開始できなくなります。
 :
(中略)
 :
サービス名 : xmlprov
表示名     : Network Provisioning Service
スタートアップの種類 : 手動
状態       : 停止中
説明 :
  自動ネットワーク提供のための XML 構成ファイルをドメインごとに管理します。


C:\Documents and Settings\dara-j>

結構重たい上なんの役にも立たないんだけども。

FORコマンド中で「tokens=1」と指定しているのは、chkconfig --listの出力結果からサービス名のみを抽出するため。FORコマンドの既定の区切り文字(空白とタブ、らしい)で各行がトークン単位に分割されるのだが、chkconfigの出力の場合は、先頭がサービス名になるのでそのように指定している。

killでメモ帳を全て終了

今度は多少は使い道あるかなぁ。こちらの「ps.jsとps.cmd / kill.cmd」で作ったpsとkillを使って、特定のプロセスをまとめて終了させると。

まず適当にnotepadをいくつか起動する。

C:\Documents and Settings\dara-j>ps | findstr notepad
 1456  5788 dara-j               4708     4708    0:00:00 notepad.exe
 5316  5788 dara-j               4852     4852    0:00:00 notepad.exe
 4228  5788 dara-j               4716     4716    0:00:00 notepad.exe
 4992  5788 dara-j               4720     4720    0:00:00 notepad.exe
 5544  5788 dara-j               4696     4696    0:00:00 notepad.exe

C:\Documents and Settings\dara-j>

こんな感じで5個のメモ帳が動いてるとして、
C:\Documents and Settings\dara-j>for /f "tokens=1" %d in ('"ps | findstr notepad
"') do @kill %d

C:\Documents and Settings\dara-j>

ってな感じでnotepad.exe全殺し。やっぱ役に立たないかな。

コメント

_ たけチン ― 2008年09月29日 11時17分09秒

UNIX系の pgrep/pkill に似たコマンドになったらうれしいのですが、、、
最低限はプロセス名称でのgrepができればいいのですが、、、
 例) pkill 'iexplore.exe'

---------------- 参考 -------------------
【名前】
pgrep, pkill - 名前または他の属性によるプロセスの検出また は
シグナル送信

【形式】
pgrep [-flvx] [-n | -o] [-d delim] [-P ppidlist] [-
g pgrplist] [-s sidlist] [-u euidlist] [-U uidlist] [-
G gidlist] [-J projidlist] [-t termlist] [-T taskidlist] [-c
ctidlist] [-z zoneidlist] [pattern]

pkill [-signal] [-fvx] [-n | -o] [-P ppidlist] [-
g pgrplist] [-s sidlist] [-u euidlist] [-U uidlist] [-
G gidlist] [-J projidlist] [-t termlist] [-T taskidlist] [-c
ctidlist] [-z zoneidlist] [pattern]

【機能説明】
pgrep ユーティリティはシステム上のアクティブなプロセスを調べ
て、コマンド行に指定した条件を満たす属性を持つプロセスのプロ
セス ID を報告します。各プロセス ID は 10 進数値として出力さ
れ、プロセス ID は区切り文字 (デフォルトは復帰改行) で区切ら
れます。コマンド行で属性オプションに値を指定するときは、複数
の値をコンマで区切って指定できます。

_ dara-j ― 2008年09月29日 12時55分49秒

たけチンさん、コメントありがとうございます。

実はコメントいただくまでpgrepやpkill知らなかったのですが、バッチファイルだけで簡単にできそうなのでやってみました。

http://dara-j.asablo.jp/blog/2008/09/29/3788378 として別エントリ起こしたので、そちらをごらんいただければ幸いです。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://dara-j.asablo.jp/blog/2008/08/04/3671885/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。