将值传递给Windows命令的中间(运行时)input提示

我有一个Windows EXE显示一些版权信息,连接到服务器,然后提示input用户名和密码。

所以每当我运行这个,我必须等待提示input用户名和密码。 我通常在命令开始显示版权信息之后input用户名,密码,但这是一个粗暴的方法。

有没有更好的方法将parameter passing给windows命令的input提示,在batch file,以便我可以避免总是键入它们?

PS在Linux中,我们使用<<这样的操作符来执行此操作

linux_command <<delimiter inputparamvalue1 inputparamvalue2 delimiter 

linux_command将在第一次input提示时运行,它将读取inputparamvalue1,并在下次input提示时读取inputparamvalue2

为了回应詹姆斯,感谢您对安全的build议。 我会照顾的。

我试图实现你的解决scheme,但没有奏效。

这些是我的文件。 请看看你是否有任何提示。

vpn.bat

 @ echo off "C:\Program Files (x86)\Cisco\Cisco AnyConnect VPN Client\vpncli.exe" connect "mycompanyvpnsite.com" 

的login.txt

 myusername mypassword 

startvpn.bat

 @ECHO OFF CALL vpn.bat < login.txt ECHO I'm back! 

结果

 D:\>startvpn.bat Cisco AnyConnect VPN Client (version 2.5.6005) . Copyright (c) 2004 - 2010 Cisco Systems, Inc. All Rights Reserved. >> state: Disconnected >> notice: Ready to connect. >> registered with local VPN subsystem. >> state: Disconnected >> notice: Ready to connect. VPN> >> contacting host (mycompanyvpnsite.com) for login information... >> notice: Contacting mycompanyvpnsite.com. VPN> >> Please enter your username and password. Username: [myusername] Password: 

用户名myusername它显示从我以前的手动logincaching。 所以看起来这个运行没有从login.txt中获取任何值。
如果我没有任何参数单独执行我的vpn.bat,我得到这样的提示

 VPN> >> Please enter your username and password. Username: [myusername] <i press enter to take the cached value> Password: ******** <i enter password and press enter> 

并连接。

VPN客户端没有权限在命令行上指定密码,这就是为什么我这样试。

我有一个工作代码! 这与詹姆斯·K的相似,但有一些臭虫。 再一次,我想重申,这是相当不安全的,因为它暴露了您的密码在一个未加密的设置。 话虽如此:

 'Anyconnect login script Dim oShell Set oShell = WScript.CreateObject("WScript.Shell") ' rather clunky way of selecting the correct directory - open to suggestion oShell.Run "cmd /k cd %PROGRAMFILES(x86)%\Cisco & cd Cisco* & vpncli.exe connect MYCOMPANYVPN.COM" ' sleep of 100 neccessary or else it opens multiple cmd windows Wscript.sleep 100 ' activate correct window oShell.AppActivate "Connect" ' optional ipsec Identifier used for multiple VPN profiles on the same server '(if you don't have one, just comment this out) oShell.SendKeys "IPSECID{ENTER}" ' Send Username and Password to Active Window. oShell.SendKeys "USERNAME{ENTER}" oShell.SendKeys "USERPASSSWORD{ENTER}" oShell.SendKeys "exit{ENTER}" 

祝你好运!

将您的用户名和密码保存在一个文件中以自动执行登录过程是一个非常糟糕的主意,并且会使要求用户名和密码供应的任何安全性失效,因为任何通过电子或物理方式访问您的计算机的人都可以访问您的纯文本用户名和密码。

也就是说,在DOS / Windows命令提示符下,你将需要一个包含你的用户名和密码的额外文件,如下所示:

LOGIN.TXT

 MyUserName MyPassword 

然后将这个文件管理到你的命令是这样的:

 @ECHO OFF CALL Command_Or_Batch < login.txt ECHO I'm back! 

这就好像你在控制台上一样,输入MyUserName[ENTER] MyPassword[ENTER]

login.txt只是一个简单的香草文本文件,并不需要.txt扩展名,或任何扩展。

只有在启动另一个批处理文件时, CALL语句才是必需的,如果您希望在完成后继续执行原始调用批处理文件。 调用可执行文件(除了批处理文件以外的任何内容)使用CALL并没有什么区别。


编辑:根据您的意见,我相信你需要这样做才能使其工作:

 @ echo off "C:\Program Files (x86)\Cisco\Cisco AnyConnect VPN Client\vpncli.exe" connect "mycompanyvpnsite.com" < login.txt 

在这种情况下,您将重定向到您的vpncli.exe ,但我相信这会产生vpncli.exe 接受来自login.txt输入的login.txt ,而不是从键盘上直到vpncli.exe退出。 这意味着你需要自动化(保存在login.txt )所有你通常需要输入的东西。这不应该是一个问题,除非你需要手动与vpncli.exe进行交互。


编辑:由于vpncli.exe似乎是在读取任何按键之前清除缓冲区,我建议可能使用VBS可能会让你想要去的地方。

VPN.VBS
'VBScript示例设置WshShell = WScript.CreateObject(“WScript.Shell”)

 WshShell.Run "C:\Program Files (x86)\Cisco\Cisco AnyConnect VPN Client\vpncli.exe connect mycompanyvpnsite.com" ' You need to know the name of the window, It should be in the upper left corner ' I'm guessing that it will be the filename of the executible WshShell.AppActivate "vpncli.exe" ' Send Username and Password to Active Window. WshShell.SendKeys "MyUserName{ENTER}" WshShell.SendKeys "MyPassword{ENTER}" 

但我不能确定。 我有问题测试,虽然我只是在批处理文件和VBS脚本之间来回跳动。

虽然我知道如果你用下面两行代替WshShell.RunWshShell.AppActivate

 WshShell.Run "%windir%\notepad.exe" WshShell.AppActivate "Notepad" 

…记事本将打开,将出现以下两行:

 MyUserName MyPassword 

如果这不适合你,我想整个删除这个答案,因为它只包含建议,没有奏效。