1

Вопрос, возможно, не такой хороший, чтобы задавать его, но я действительно не могу обойти это решение. У меня есть файл .bat который соединяет сервер UNIX (используя команду командной строки PuTTY) и в дальнейшем выполняет сценарий .sh . Из файлов .bat я передаю параметры в мой сценарий оболочки Unix, который работает хорошо. Но это вызывает проблему для одного значения параметра.

Значение:

'[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

из-за пробела он не читает полную строку, и я не могу заменить пробел на что-то еще, мне нужно это место. В моем сценарии 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 ответ1

1

Основная проблема в том, что у вас есть кавычки, которые вам нужны в вашем аргументе, и у вас также есть пробелы, которые вам нужны в вашем аргументе. Таким образом, обходной путь для этого заключается в том, чтобы заключить все в кавычки и удвоить кавычки, которые должны быть частью аргумента, чтобы синтаксический анализатор cmd рассматривал его как один большой аргумент. Затем вы можете использовать замену строки, чтобы превратить двойные кавычки в единый набор кавычек.

Вот упрощенное решение вашей проблемы для этого конкретного аргумента. Вы будете выполнять файл летучей мыши, как это.

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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .