5 分間隔で実行するために AHK に割り当てたいジョブがあります。txt ファイルの内容を確認する必要があります。たとえば、c:\test.txt とします。このファイルには、次の形式の任意の数の行を含めることができます。
prog 1
prog 2
prog 3
...
prog N
他のテキストを含む行の間。
私の目的は、最後の行の prog という単語の直後の番号を AHK に伝えることです。これは、これらの行がこのファイル内で数字の順番になっているため、リスト内で最大の番号です。
私の壮大なアイデアは、「prog 1」から「prog N」までの行の存在を確認することです。ここで、N は 20 未満の数字で、cmd ウィンドウで一連の検索コマンドを使用して、エラーレベルを取得し、エラーレベルが 1 に達したときに、最後に正常に実行された find コマンドであるため、目的の変数をループ インデックスの値から 1 を引いた値に設定します。
i=1
loop 20
{
type c:\users\me\test.txt | find "prog "%i%
if %errorlevel% != 0
{
num := i-1
; exit the loop in some way here
}
else
{
i := i+1
}
} ; end loop
この時点で関心があるのは、変数 %num% に格納されている値だけです。これを実現するのが最も洗練されたソリューションではないことはわかっていますが、アイドル状態のラップトップで毎日数回実行すると、パフォーマンスが低下する可能性があります。
これまでのところ、私はこのアイデアの非常に基本的なコンポーネントで行き詰まっています: find コマンドと、それが生成するエラーレベルを AHK に渡すことです。
これが私のコードです:(このコードは、AHKフォーラムから入手したfindコマンドのテスト専用です)
Run %COMSPEC% /K type c:\users\me\test.txt | find "prog 4", , max
msgbox %ErrorLevel%
return
このコードを実行すると、"prog 4" 行があるかどうかに関係なく、メッセージ ボックスには常に値 "0" が表示されます。
コマンドRunをRunWaitに置き換えると、エラーレベルが期待どおりに表示されますが、その場合、自動化プロセスでグリッチが発生します.cmdプロンプトを手動で閉じることを期待しています。コマンド RunWait の。
どうすればこのハードルを乗り越えることができますか? 機能全体を dos バッチ ファイルにロードし、最後にバッチ ファイルから数値出力を取得することにオープンですが、AHK を使用したプログラミングは、DOS バッチ プログラミングよりもはるかに簡単で理解しやすいことに気付きました。したがって、私の好みは AHK スクリプト側です。
ありがとうございました