c#打开批处理文件但不执行.bat中的VBScript

Posted

技术标签:

【中文标题】c#打开批处理文件但不执行.bat中的VBScript【英文标题】:c# opens the batch file but doesn't execute the VBScript in the .bat 【发布时间】:2019-11-21 10:01:53 【问题描述】:

我正在用 C# 开发一个应用程序。主要思想是:

    按下按钮 打开 .bat 文件 .bat 文件打开 Telnet [IP] [端口] .bat 文件执行 VBScript VBScript 将一些命令写入 telnet 窗口

当我通过双击运行此批处理文件时,它运行良好。但是,当我尝试从 C# 应用程序运行它时,它不起作用。

我已经尝试了很多方法。

以下是我尝试过的一些示例:

Is it possible to use a batch file to establish a telnet session, send a command and have the output written to a file?

C# Winforms and command line batch files

batch works fine but "windows cannot find devcon.exe" in c# program

当我尝试这个时:

string cmd = @"path";
var m_command = new System.Diagnostics.Process();
m_command.StartInfo.FileName = @"file.bat";
m_command.StartInfo.Arguments = cmd;
m_command.Start();

我得到了错误:

windows 找不到 .exe 请确保您输入的名称正确,然后重试

当我尝试这个时:

string cmd = @"path";
var m_command = new System.Diagnostics.Process();
m_command.StartInfo.FileName = @"file.bat";
m_command.StartInfo.Arguments = cmd;
m_command.Start();

它可以工作,但只是打开 telnet,VBScript 不起作用。

这是.bat文件中的代码:

:: Open a Telnet window
start C:\Windows\System32\telnet.exe 192.168.0.198 49211
:: Run the script 
cscript SendKeys.vbs 

这是 .svs 文件中的代码:

set OBJECT=WScript.CreateObject("WScript.Shell")
WScript.sleep 500
OBJECT.SendKeys "TENTER" 
WScript.sleep 1000
OBJECT.SendKeys "TENTER"
OBJECT.SendKeys " "

我希望 .VBS 将命令写入 telnet 窗口,但是当我单击 c# 表单中的按钮时,它只是打开 telnet,VBScript 不起作用。

【问题讨论】:

不要那样做。 从不使用SendKeys 自动执行Windows telnet 命令。而是使用实际上可编写脚本的 telnet 命令,例如plink 来自PuTTY suite。 我没有用 C# 编写,甚至没有 Windows,但为什么不使用 Expect 和 TCL,它是为此类任务而发明的,例如与终端程序“对话”。远程登录? 你好,@AnsgarWiechers!谢谢你问我,但你能解释一下为什么不正确使用 SenKeys 吗? SendKeys 需要一个交互式 GUI(不能在后台进程中使用它),它会将击键发送到任何活动窗口。这可能是也可能不是您认为的那样。它非常不可靠,除非绝对没有其他方法可以解决手头的问题,否则不应使用它。甚至那时可能还没有。 我建议查看发布在 Stack Overflow 或其他网站上的 C# 代码,了解其他计算机上基于 telnet 的访问。例如C# Telnet Library 或Telnet Scripting in C#。我已经在一个用 C++ 编写的应用程序中实现了一个 telnet 客户端,并使用现在非常古老的 Visual Studio 6 使用万维网中的代码进行编译,这个 C++ 编码的应用程序仍然可以在 Windows 95 到 Windows 10 上运行,而无需调用任何其他可执行文件并且没有任何附加 DLL。 【参考方案1】:

你可以做的是找到cscript.exe文件并直接执行它,像这样:

for /f "tokens=*" %%C in ('where csscript.exe') do (%%C Sendkeys.vbs&goto Next)
:Next
rem This is only necessary because we want to run the script once

这个migth工作,但正如评论者所说,真的不推荐使用sendkeys,因为一旦窗口设置不正确,或者某些进度会延迟,它可能会导致重大问题。

【讨论】:

以上是关于c#打开批处理文件但不执行.bat中的VBScript的主要内容,如果未能解决你的问题,请参考以下文章

怎么用c#打开dos命令或执行bat 关机命令

bat 打开cmd 执行Python文件

在BAT文件怎么写一个执行运行的命令?

按顺序打开程序的批处理文件

windows批处理文件.bat双击无法执行,而且默认是记事本打开,右键快捷菜单里也没执行命令,请问如何修复?

求教:运行bat文件后如何让cmd窗口自动关闭?