有什么在说谎……
请记住,当我手动运行脚本时,这会按预期工作,但通过任务调度程序运行时则不会。
我有一个 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'不存在......
同样,手动运行总是会成功。