Parâmetros com barras de espaço analisadas incorretamente para um script do PowerShell executado a partir de um arquivo de lote

0

Eu tenho um arquivo em lotes que executa um script powershell e preciso passar dois parâmetros para o script. No meu lote, parece assim:

powershell -executionpolicy remotesigned -File "my script.ps1" "my path1\" "my path2\somefile.txt"

Do jeito que está agora, os parâmetros para o meu script do PowerShell ficam completamente confusos e eu fico:

  • meu caminho1 "meu
  • caminho2 \ algum arquivo.txt

Eu tentei encapsular meus params com ' e ' caracteres e quase consegui o que quero, mas o segundo caractere de aspas permanece no script powershell. O que eu obtenho é isto:

powershell -executionpolicy remotesigned -File "my script.ps1" "'my path1\'" "'my path2\somefile.txt'"
  • 'meu caminho1'
  • 'meu caminho2 \ algum arquivo.txt'

E o que eu quero é isso

  • meu caminho1 \
  • meu caminho2 \ algum arquivo.txt

Eu sei que posso remover as citações redundantes no script do powershell, mas existe uma maneira melhor de fazer isso? Em outras palavras, como posso passar esses parâmetros para o powershell de uma forma que os mantenha saudáveis?

Script do powershell de teste:

echo $args[0]
echo $args[1]
    
por jahu 28.03.2015 / 17:18

1 resposta

0

Eu consegui descobrir. O problema foi a barra no final do primeiro parâmetro. Essa barra estava escapando da minha citação e, por causa disso, ela não estava funcionando como uma citação (ainda assim o powershell ainda corta a corda em algum espaço posterior por qualquer motivo).

Meu arquivo de lote foi gerado automaticamente, mas consegui corrigi-lo adicionando outra barra no final do primeiro parâmetro (que deveria terminar com uma barra).

powershell -executionpolicy remotesigned -File "my script.ps1" "my path1\" "my path2\somefile.txt"

Esse problema provavelmente não é específico para arquivos em lote e provavelmente afeta também a execução de scripts do PowerShell a partir da linha de comando.

    
por 28.03.2015 / 17:52