CMD无文件等效于<重定向

时间:2018-12-11 17:47:14

标签: windows batch-file command-line cmd

我有一个包装了AnyConnect Mobility Client CLI(vpncli.exe)的批处理,并要求用户名和密码稍后将它们处理到vpncli。

简化代码:

set /p user_id=Username:
set /p pwd=Password:
echo %user_id%> c:\temp\configvpn.txt
echo %pwd%>> c:\temp\configvpn.txt

set install_dir="C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client"

%install_dir%\vpncli.exe connect myvpn.mydomain.TLD -s < c:\temp\configvpn.txt

net use h: \\fileserver\sharename /user:domain\%user_id% %pwd%

最后一行是我们这样做的原因:不要两次提示用户密码(第一个用于连接VPN,第二个用于映射网络驱动器)

出于安全原因,我正在改进脚本以不将密码写入磁盘。 我需要与此“

我尝试过:

(
    @echo %user_id%
    @echo %pwd% 
) | %install_dir%\vpncli.exe connect myvpn.mydomain.TLD -s

到目前为止没有成功。输出是这个循环:

  >> Please enter your username and password.
Group: VPN-TESTGROUP

Username: [myUsername] Password:
  >> Login failed.
Group: VPN-TESTGROUP

Username: [myUsername] Password:
  >> Login failed.

(无限期重复)

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

这可能是管道块的问题,因为在每个命令的末尾添加了空格。

此代码可避免空格并应解决您的问题

(SET LF=^
%=empty=%
)

(
    echo %user_id%%%LF%%rem.
    echo %pwd%%%LF%%rem.
) |  %install_dir%\vpncli.exe connect myvpn.mydomain.TLD -s

但是您应该在用户名或密码中没有任何特殊字符的情况下对其进行测试!

答案 1 :(得分:2)

正如您已经发现的那样,问题出在管道内的尾部空间,正如您在jeb's answer中看到的那样,乘坐尾部空间需要特殊处理。

导致混乱的管道的一个方面是,管道命令不是在具有批处理语法规则的批处理文件上下文中执行的,而是在子cmd实例中具有命令行语法规则的命令行上下文中执行的。

需要彻底了解CMD / Batch管道的机制,以便能够以此方式构造和维护有效的解决方案,对于稍微复杂一些的管道块来说,这并不是一件容易的事。

这是一种替代方法,它可以以管道方式对任何复杂的命令块进行管道化,具有与普通批处理代码相同的灵活性。

false