3

何かが嘘をついている...

これは、スクリプトを手動で実行すると期待どおりに機能しますが、タスク スケジューラを介して実行すると機能しないことに注意してください。

ネットワーク ドライブにファイルが存在するかどうかを確認し、存在する場合は削除する 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」は存在しません...

繰り返しますが、手動実行は常に成功します。

4

1 に答える 1