Gerencia o espaço entre as palavras (.bat)

1

A pergunta pode não ser tão boa para perguntar, mas eu realmente não estou conseguindo uma solução para o mesmo. Eu tenho um arquivo .bat que conecta o servidor UNIX (usando PuTTY linha de comando plink) e ainda executa um script .sh . De .bat arquivos estou passando parâmetros para meu script de shell Unix, que está funcionando bem. Mas isso está causando um problema para um valor de parâmetro.

Valor:

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

Eu quero passar o valor acima no mesmo formato. Eu tentei o caminho abaixo mencionado:

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

Pensei em passar em "" resolverá o problema, mas não funcionará para mim. Agora, o problema é quando eu executo meu arquivo .bat , ele quebra minha string, que fica assim quando eu imprimo o valor:

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

por causa do SPACE ele não está lendo a string completa, e eu não posso substituir o SPACE com mais nada, eu preciso ter esse espaço. No meu script Unix eu li o parâmetro da seguinte maneira (vindo de .bat):

admfilter="'$admFilter'"

Este é um dos campos de parâmetros no comando do gerenciador do servidor. Mas o problema está em .bat , não no script. Quando eu substituir esse espaço branco com _ tudo está funcionando bem. Mas eu preciso ter esse espaço.

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

Chamada de .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"

Eu editei meus valores reais e só mostrei detalhes relevantes. Quando eu verifico echo %admFilter% , vejo a saída acima mencionada.

    
por Tushar Sharma 16.12.2017 / 07:56

1 resposta

1

O problema essencial é que você tem aspas que precisa em seu argumento e também tem espaços que você precisa em seu argumento. Portanto, o trabalho em torno disso é cercar a coisa toda entre aspas e dobrar as aspas que precisam fazer parte do argumento, para que o analisador cmd a veja como um grande argumento. Então você pode usar a substituição de string para fazer as aspas duplas em um único conjunto de aspas.

Aqui está uma solução simplificada para o seu problema para esse argumento em particular. Você vai executar o arquivo bat assim.

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

Em seguida, o readargs.bat fará isso.

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

E a saída será.

"[List Of Values Parent (UDA).Value]=""LOV RAF_PO_PRM_TYPE_ADM""
[List Of Values Parent (UDA).Value]="LOV RAF_PO_PRM_TYPE_ADM"
    
por 16.12.2017 / 19:07