ActiveTCL - 无法从Expect脚本运行批处理文件

时间:2012-06-25 15:20:11

标签: scripting batch-file tcl expect activetcl

我最初尝试使用以下命令从Expect运行可执行文件(tftpd32.exe),但由于某些未知原因,它会挂起整个脚本:

exec c:/tftpd32.351/tftpd32.exe

因此,决定调用一个将启动可执行文件的批处理文件。

我尝试使用以下命令调用批处理文件,但收到一条错误消息,指出Windows无法找到该文件。

exec c:/tftpd32.351/start_tftp.bat

我也尝试了以下操作,但它没有启动可执行文件:

spwan cmd.exe /c c:/tftpd32.351/start_tftp.bat

批处理文件包含这个,当我双击它时它运行正常:

start tftpd32.exe

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:1)

从Tcl运行该程序的正确方法是:

set tftpd "c:/tftpd32.351/tftpd32.exe"
exec {*}[auto_execok start] "" [file nativename $tftpd]

请注意,在使用start时,应始终使用额外的空参数(由于start的奇怪方式;它在引号中有一个可选字符串,用于指定要创建的窗口标题,但是它倾向于误解第一个引用的字符串,即使它没有强制参数也是如此)并且您需要使用可执行文件的本机系统名称来运行,因此file nativename

如果你的expect程序(8.4或之前版本)中有较旧版本的Tcl,你可以这样做:

set tftpd "c:/tftpd32.351/tftpd32.exe"
eval exec [auto_execok start] [list "" [file nativename $tftpd]]

奇怪的list构造中的eval exec命令增加了一些必要的引用,否则你将无法生成。完全按照上面使用它,你会得到非常奇怪的错误。 (或升级到你不需要几乎所有代码体操的东西;添加{*}语法是有充分理由的!)