Windowsタスクスケジューラによって起動される.batファイルがかなりあります。そして、その後、またはプロセスで呼び出されたアプリケーションによって。後者の場合、アプリは起動したことを記録する.batファイルと、完了したログを記録する別の.batファイルを起動します。それらはすべてログファイルに書き込む別の単一ログ.batファイルをトリガーします。そこにそれらがオーバーラップさせ、複数の状況:自律型.batファイルを順番に実行するようにします。
をタスクスケジューラのタスクのすべてを手動で一度アプリのタスクの
1を実行している他の関連するタスク スケジューラは、スケジュール通りに実行したときにまだ実行されています。
そこで、我々は時々見:それは別の のプロセスによって使用されているので、
は、プロセスはファイルにアクセスすることはできません。
この結果、ログエントリが失われてしまいます。
ただ、明確にするために: タスクスケジューラのタスク:
GO1 >>>起動bat_name1.bat
GO2 >>>起動bat_name2.bat
など
bat_name1.bat、bat_name2.bat、....
CALL log.bat %bat_nameN%
app.exe %bat_nameN%
EXIT
app.exeのタスク:nameN
がSTARTnameN.bat
は(APPのコアを実行する)起動
起動ENDnameN.bat
STARTnameN.batとENDnameN .bat
log.bat %nameN%
だから、目標はすべてのこれらのプログラムは、自律的に実行するのではなく、ログファイルが完全に干渉せずに書き込むことができるので、結果をsequentializeできるようにするだろう
@ECHO OFF
SET fileloc=C:\Users\Public\BackupLogs
echo %time% %date% %2 %3 %~1>%fileloc%\temp.txt
type %fileloc%\temp.txt>>%fileloc%\backuplog.txt
log.bat 210
。
temp.txtをtempN.txtに分割し、その結果を終了プロセスの一部として単一のbackuplog.txtに追加することが考えられます。それはおそらく重なり合うかもしれないので、それをより良くするだろうが、100%の解決策ではないように思われるでしょうか?
別々のtempN.txtログファイルの提案は良い方法ですが、あなたが言うように、オーバーラップする呼び出しを処理しません。バッチファイルが実行されるのを待つか、ファイルが存在する場合に終了するようなロッキングコードを書くことができます。複雑な環境では、これは難しく、永続的なメンテナンスの問題です。スケジューラーツールを検討することもできます。私はadTempus http://www.arcanadev.com/でいくつかの成功を収めました。私は唯一のユーザーであり、adTempusを選択した場合には恩恵を受けることはありません。 – lit