我创建了一个批处理文件,它接受各种输入,然后在前面的命令中使用它们。这个脚本在我的计算机上运行良好,但是当我把这个脚本放到另一台计算机上并使用 PsExec.exe 远程执行这个文件时...它无法正常工作...如果在同一台计算机上执行,这个批处理文件运行良好...这个错误只发生在网络上。
它应该接受输入并使用它们,就像..
set /p ip=输入ip:[用户输入192.168.1.1]
set /p sub=输入sub:[用户输入255.255.255.0]
echo %ip% 子网掩码 %sub%
它应该回响
192.168.1.1子网掩码255.255.255.0
相反,它回响
1 子网掩码 2
它甚至不会停下来接受其他输入。简而言之,它只接受输入的任何内容的第一个字符。有什么帮助吗?
答案1
这是 psexec 输入的一个长期问题。问题似乎与管道处理有关,基本上,用户在行中输入的内容set/p
被分解为多个输入并分段输入到批处理文件中,这当然不是它应该工作的方式。
最接近纯解决方案的是用户在 SysInternals 自己的 PsExec 论坛上psexec
发布的批处理代码片段,网址为qazy
http://forum.sysinternals.com/psexec-do-not-recog-p_topic5101_post137110.html#137110(顺便说一句,这个帖子是在 2006 年发起的,qazy 的回复是在 2012 年发布的)。代码基本上预期损坏的输入,并尝试将碎片重新组合成单个字符串。它大部分情况下都有效,但根据我的经验,有时需要额外的 ENTER 键来结束一行输入。
我最近发现的另一种选择paexec
是https://www.poweradmin.com/paexec/(强制性免责声明:我与任何事物都没有任何关联/利益poweradmin
,但我喜欢它们的paexec
开源,并且我已经将它用于现实生活中的琐事)。
碰巧的是,paexec
这个输入管道似乎是正确的。批处理文件testsetp.cmd
@echo off
set /p "ip=Enter the ip: "
set /p "sub=Enter the sub: "
echo %ip% subnet mask %sub%
输出
C:\etc>paexec \\otherpc cmd /c D:\temp\testsetp.cmd
PAExec v1.26 - Execute Programs Remotely
Copyright (c) 2012-2013 Power Admin LLC
www.poweradmin.com/PAExec
Connecting to otherpc...
Starting PAExec service on otherpc...
Enter the ip: 192.168.1.1
Enter the sub: 255.255.255.0
192.168.1.1 subnet mask 255.255.255.0
cmd returned 0
PAExec returning exit code 0