OS: Windows XP、Windows 7 64bit。
いくつかの毎日のビルド プロセスに使用されるかなり重い cmd スクリプトがあります。これらのスクリプトは、他の多数の (ウィンドウ化された) プロセスを生成します。メインの cmd スクリプトを開始する、小さな単純なスクリプトである制御用の cmd スクリプトが 1 つあります。小さな制御スクリプトの目的は、メイン スクリプトまたはその子スクリプトが失敗した状況をクリーンアップすることです。これはかなり簡単に実現できます。メイン スクリプトとそのすべての子スクリプトには、一意の識別子で始まるウィンドウ タイトルがあります。制御スクリプトは、メイン スクリプトとそのすべての子スクリプトが完了していると判断すると、タスクリストを使用して、次の方法でハングしたプロセスのウィンドウを見つけます。
tasklist.exe /FI "WINDOWTITLE eq UniqueIdentifier*"
これはすべてXPで非常にうまく機能しました。ここで、Windows7 64 ビットに入ります。ここで、メインの .cmd スクリプトまたはその他の .cmd シェル ウィンドウが、
title UniqueIdentifier Followed By Descriptive Text
Windows7 64 ビットでは、タイトルの先頭に他のテキストが追加されます (具体的には、「管理者:」など)。先頭に追加されたテキストは信頼できません。だから今私たちは使いたい
tasklist.exe /FI "WINDOWTITLE eq *UniqueIdentifier*"
しかし、これは「検索フィルターを認識できません」というエラーメッセージで失敗します。UniqueIdentifier をポストフィックスとして使用する方法は機能しません: コマンド
tasklist.exe /FI "WINDOWTITLE eq *UniqueIdentifier"
また、同じエラー メッセージが表示されます。Microsoft のフィルタにおける「ワイルドカード」の概念は、終端文字として「*」を使用すること以外には拡張されていないようです。ああ。
回避策はありますか? Pslist では、ウィンドウ タイトルによるフィルタリングが許可されていないようです。