何かが嘘をついている...
これは、スクリプトを手動で実行すると期待どおりに機能しますが、タスク スケジューラを介して実行すると機能しないことに注意してください。
ネットワーク ドライブにファイルが存在するかどうかを確認し、存在する場合は削除する TCL スクリプトがあります。私はこれを行います:
if {[file exists X:/path/to/file.txt]} {
log_output "Deleting file X:/path/to/file.txt"
file delete -force X:/path/to/file.txt
}
タスクスケジューラ経由で実行すると、ファイルが削除されないことに気付きました。そのため、より多くの情報を取得するために別のチェックを実行しました。
if {[file exists X:/path/to/file.txt]} {
log_output "File X:/path/to/file.txt NOT DELETED!"
} else {
log_output "File X:/path/to/file.txt DELETED!"
}
私の出力は次のとおりです。
Deleting file X:/path/to/file.txt
File X:/path/to/file.txt DELETED!
2 行目は、存在チェックが失敗したため、ファイルが実際に削除されたと報告されたことを確認します。最後に、新しいファイルを生成するコマンドを実行します。
exec myProgram --outFile X:/path/to/file.txt
繰り返しますが、奇妙なことに、このスクリプトを手動で実行すると、問題なく動作します。ただし、タスク スケジューラ経由で (Win7 を使用して) 実行するように設定すると、出力ログに次のように表示されていても、古いファイルは削除されません。
Deleting file X:/path/to/file.txt
File X:/path/to/file.txt DELETED!
ファイルの日付とタイムスタンプを確認すると、最後に手動で実行したときのものです。私はそれがパーミッションエラーだと思っていましたが、これは意味がありません。削除されたと報告されているのに、変更されていないのはなぜですか?
徹底的にするために、他の回避策をいくつか試しました。コマンドを使用してネットワーク ドライブにファイルを書き込む代わりに、ローカルに書き込んでみました。
if {[file exists C:/path/to/file.txt]} {
log_output "Deleting file C:/path/to/file.txt"
file delete -force C:/path/to/file.txt
}
if {[file exists C:/path/to/file.txt]} {
log_output "File C:/path/to/file.txt NOT DELETED!"
} else {
log_output "File C:/path/to/file.txt DELETED!"
}
exec myProgram --outFile C:/path/to/file.txt
次に、それをネットワーク ドライブにコピーします。
file copy -force C:/path/to/file.txt X:/path/to/file.txt
file copy -force C:/path/to/file.txt X:/path/to/file1.txt
私は得る:
Deleting file X:/path/to/file.txt
File X:/path/to/file.txt DELETED!
Deleting file C:/path/to/file.txt
File C:/path/to/file.txt DELETED!
しかし、案の定、古いファイルは残り、新しいファイル「file1.txt」は存在しません...
繰り返しますが、手動実行は常に成功します。