管理单词之间的空格(.bat)

管理单词之间的空格(.bat)

这个问题可能不太好问,但我真的没有找到解决方法。我有一个.bat文件,它连接 UNIX(使用 PuTTY 命令行 plink)服务器并进一步执行.sh脚本。从.bat文件中,我将参数传递给我的 Unix shell 脚本,该脚本运行良好。但它导致一个参数值出现问题。

价值:

'[List Of Values Parent (UDA).Value]="LOV RAF_PO_PRM_TYPE_ADM"'

我想以相同的格式传递上述值。我尝试了下面提到的方法:

1) "[List Of Values Parent (UDA).Value]=\"LOV RAF_PO_PRM_TYPE_ADM\""

我以为传入它""会解决问题,但对我来说不起作用。现在的问题是当我运行我的.bat文件时,它会破坏我的字符串,当我打印值时,它看起来像这样:

"[List Of Values Parent (UDA).Value]=\"LOV

由于 SPACE,它无法读取完整字符串,我无法用其他任何东西替换 SPACE,我需要那个空格。在我的 Unix 脚本中,我以以下方式读取参数(来自 .bat):

admfilter="'$admFilter'"

这是服务器管理器命令中的一个参数字段。但问题出在.bat,而不是脚本中。当我用 替换那个空格时,_一切都正常。但我需要那个空格。

脚本:

@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 admFilter=%vector[9]%
SET userId=%vector[10]%
SET password=%vector[11]%
SET host=%vector[12]%
SET sudoUser=%vector[13]%
SET localPath=%vector[14]%

echo %admPath%
echo %admdatatype%
echo %admeaimethod%
echo %admprefix%
echo %gatewayname%
echo %enterpriseName%
echo %serverName%
echo %serveruserId%
echo %serverpassword%
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% "PATH=/bin:/usr/bin:/usr/local/bin /opt/siebel/w44gq8sw/ExportLov.sh %admPath% %admdatatype% %admeaimethod% %admprefix% %gatewayname% %enterpriseName% %serverName% %serveruserId% %serverpassword% %admFilter% %password% %sudoUser% %localPath% " > LOV_export_success.txt 2>&1

呼唤.bat

LovExport.bat "/global/u70/globepfdev/ADM" "LOV" "Upsert" "export_ADM" "GatewayName" "EnterpriseName" "ServerName" "ServerUser"  "ServerPassword" "[List Of Values Parent (UDA).Value]=\"LOV RAF_PO_PRM_TYPE_ADM\"" "userId" "Password" "Host" "'SudoUser'" "/opt/siebel/w44gq8sw/exportFile"

我已编辑实际值,仅显示相关详细信息。当我检查时,echo %admFilter%我看到了上述输出。

答案1

根本问题是,您在参数中需要引号,也需要空格。因此,解决这个问题的方法是将整个内容括在引号中,并将需要作为参数一部分的引号加倍,以便 cmd 解析器将其视为一个大参数。然后,您可以使用字符串替换将双引号变成一组引号。

以下是针对该特定参数的问题的简化解决方案。您将像这样执行 bat 文件。

readargs.bat "[List Of Values Parent (UDA).Value]=""LOV RAF_PO_PRM_TYPE_ADM""

然后 readargs.bat 将会执行此操作。

@echo off
echo %1
set "arg=%~1"
set "arg=%arg:""="%"
echo %arg%
pause

并且输出将是。

"[List Of Values Parent (UDA).Value]=""LOV RAF_PO_PRM_TYPE_ADM""
[List Of Values Parent (UDA).Value]="LOV RAF_PO_PRM_TYPE_ADM"

相关内容