2013-10-25 129 views
1

東西在說...文件沒有刪除TCL

請記住,當我手動運行腳本時,但不是在通過任務計劃程序運行腳本時,它會按預期工作。

我有一個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! 

第二行確認爲已刪除的存在檢查失敗的文件實際上是報道。最後,我運行一個生成新文件的命令。

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'不存在...

A增益,手動運行總是會導致成功。

+0

調度任務中的文件映射很困難。使用UNC路徑。 ('/ machine/share/path/to/file.txt') –

+0

是的,我也試過。相同的結果。按預期手動運行。即使輸出日誌將文件顯示爲已刪除,由Task Scheduler運行時仍然失敗。 – radensb

+0

計劃任務是否有權刪除該文件? –

回答

0

試試這個

1.設置在一個變量的文件位置或路徑

set way "/XX/XXX". 

2.適用本

if {[file exists $way/file.txt]} { 
    exec rm -f $way/file.txt 
} 

我希望這會工作。

+0

「我希望這會起作用」並不是很有說服力。我希望它也能起作用,如果問題確實存在,我希望能迴應它,並且你會清理它。也許在此期間,你可以解釋爲什麼你認爲這會起作用? –