我正在尝试从命令行运行.bat
文件,该文件调用UNIX
shell脚本,之前它工作正常,突然现在我在运行{{1时遇到此问题从命令行开始,它也出现在非常具体的行上。
错误 - :
.bat
蝙蝠档案 - :
'P" "'' is not recognized as an internal or external command,
operable program or batch file.
在上面的代码中,如果删除最后一行,我无法看到控制台上打印的错误,但是当我保留该行时,我在输出文件中得到上述错误。之前工作正常,我是不明白为什么我现在得到这个问题。请帮忙。
UNIX SCRIPT - :
@ECHO OFF
setlocal EnableDelayedExpansion
set n=0
for %%a in (%*) do (
set vector[!n!]=%%a
set /A n+=1
)
SET admPath=%vector[0]%
SET admdatatype=%vector[1]%
SET admeaimethod=%vector[2]%
SET admprefix=%vector[3]%
SET gatewayname=%vector[4]%
SET enterpriseName=%vector[5]%
SET serverName=%vector[6]%
SET serveruserId=%vector[7]%
SET serverpassword=%vector[8]%
SET userId=%vector[9]%
SET password=%vector[10]%
SET host=%vector[11]%
SET sudoUser=%vector[12]%
SET localPath=%vector[13]%
SET admFilter=%vector[14]%
echo %admPath%
echo %admdatatype%
echo %admeaimethod%
echo %admprefix%
echo %gatewayname%
echo %enterpriseName%
echo %serverName%
echo %serveruserId%
echo %serverpassword%
echo %userId%
echo %password%
echo %host%
echo %sudoUser%
echo %localPath%
echo %admFilter%
echo y | "C:\Program Files\PuTTY\plink" -ssh %userId%@%host% -pw %password% exit
"C:\Program Files\PuTTY\plink" -ssh -t %userId%@%host% -pw %password% "/opt/siebel/w44gq8sw/ExportLov.sh %admPath% %admdatatype% %admeaimethod% %admprefix% %gatewayname% %enterpriseName% %serverName% %serveruserId% %serverpassword% %admFilter% %password% %sudoUser% %localPath% " > LovExport_Status.txt 2>&1
我已经检查了windows的enviornment变量,它看起来很好,因为错误来自特定的行,我想问题是别的。
如果需要任何其他信息,请告诉我。
答案 0 :(得分:2)
命令行上引用的环境变量的字符串值之一
"C:\Program Files\PuTTY\plink" -ssh -t %userId%@%host% -pw %password% "/opt/siebel/w44gq8sw/ExportLov.sh %admPath% %admdatatype% %admeaimethod% %admprefix% %gatewayname% %enterpriseName% %serverName% %serveruserId% %serverpassword% %admFilter% %password% %sudoUser% %localPath% " > LovExport_Status.txt 2>&1
包含&
或|
,如果包含此字符的参数字符串未用双引号括起来,则具有特殊含义,请参阅Single line with multiple commands using Windows batch file。
包含空格或其中一个字符&()[]{}^=;!'+,`~<|>
的参数字符串必须用双引号括起来,以便将整个参数字符串解释为文字字符串。
所以我强烈建议:
"C:\Program Files\PuTTY\plink" -ssh -t "%userId%@%host%" -pw "%password%" "/opt/siebel/w44gq8sw/ExportLov.sh %admPath% %admdatatype% %admeaimethod% %admprefix% %gatewayname% %enterpriseName% %serverName% %serveruserId% %serverpassword% %admFilter% %password% %sudoUser% %localPath% " > LovExport_Status.txt 2>&1
%userId%@%host%
和%password%
也用双引号括起来。
我认为环境变量password
的字符串值包含&符号或竖线条,下一个非空格字符为p
,导致批处理文件执行时出现错误消息。
通过在最后一行echo on
上方插入并在命令提示符窗口中运行批处理文件而不是双击批处理文件,可以看到错误原因。
我建议在Why is no string output with 'echo %var%' after using 'set var = text' on command line?上阅读有关为包含&
或|
的环境变量或在命令行中具有特殊含义的其他字符分配字符串的答案(如果没有用双引号括起来)在命令执行之前的Windows命令解释程序的预处理阶段,使用扩展引用字符串和环境变量,而不是使用delayed expansion。