我正在使用Windows 8.1,并且正在运行一个tcl脚本来检查文件之间的差异:
package require twapi
proc diff {file1 file2} {
set f1 [open $file1 "rb"]
set f2 [open $file2 "rb"]
try {
while 1 {
if {[read $f1 4096] ne [read $f2 4096]} {
return 0
} elseif {[eof $f1]} {
# The same if we got to EOF at the same time
return [eof $f2]
} elseif {[eof $f2]} {
return 0
}
}
} finally {
close $f1
close $f2
}
}
我需要在后台运行此过程,但是每次运行它都会打开一个Windows终端。我尝试使用vbs脚本,它可以工作:
CreateObject("Wscript.Shell").Run "diff.tcl",0,True
但是我需要将参数从另一个程序传递到diff.tcl,因此以vbs脚本运行没有用。
答案 0 :(得分:2)
多纳尔怎么说。
具体来说,您应该安装Windows™
设置为与tclsh.exe
关联以与.tcl
运行文件
扩展名。 (一种学习方法的方法
关联正在运行assoc.exe
;另请参见ftype.exe
。
tclsh.exe
(名称源自“ Tcl Sh ell”)
用所谓的“控制台子系统”编译的应用程序
标志设置为打开(特殊标头中的标志包含Windows™上可执行文件的元信息)。
当操作系统运行这样的应用程序时,它会注意到它的需要
一个控制台,因此它产生一个,然后运行该应用程序
在里面。
尝试使用Run
的{{1}}方法
对象并传递0作为第二个参数来隐藏
创建的窗口;有关更多信息,请参见this。
Tcl附带了另一个解释器,称为WScript.Shell
(“ Wi 赋予 Sh ell”的别名)
来自wish.exe
,因为它具有自动可用的Tk(已加载)。
您可能想使用tclsh.exe
显式运行脚本
并将脚本的路径名作为参数传递给它。
您可能需要使用wish.exe
作为脚本中的第一个命令来隐藏Tk创建的主窗口。
答案 1 :(得分:0)
您是否考虑过将结果输出到临时文件,并在下游查找该文件?然后,您可以使用VBS方法键入脚本。杂乱无章,但行得通。