Estou trabalhando em um programa do Windows que adiciona valores à variável de ambiente PATH . A variável PATH é delimitada por ponto e vírgula ( ;
), e qualquer caminho de pasta válido pode ser incluído. No entanto, ;
é válido em caminhos de pasta, então caminhos contendo ponto e vírgula devem ser colocados entre aspas duplas ao serem adicionados ao caminho:
C:\Program Files (x86);"C:\;My Folder";C:\Program Files
Para evitar esse problema com ponto e vírgula, meu programa envolve todos os caminhos entre aspas duplas. No entanto, alguém me informou recentemente que o Powershell não funciona com valores entre aspas na variável PATH, pois ele trata as aspas como caracteres comuns:
Observei como o PowerShell manipula a variável Path (com base neste código: PowerShell/PowerShell@16176ef/src/System.Management.Automation/engine/CommandDiscovery.cs#L1187-L1240). Pelo que posso perceber, o PowerShell não remove aspas duplas - ele apenas divide os caminhos sempre que vê um ponto e vírgula.
Então, o valor PATH C:\Program Files (x86);"C:\;My Folder";C:\Program Files
é interpretado incorretamente assim (se entendi corretamente o que está acontecendo):
C:\Program Files (x86)
"C:\
My Folder"
C:\Program Files
Aqui está um vídeo demonstrando o comportamento (isso só ocorre com o Powershell, não com o cmd): https://www.mediafire.com/file/aih2ky9fz07x5w0/powershellpathwithsemicolonsbug.mp4/file
Qual é a melhor maneira para meu programa lidar com isso? E, mais urgentemente, por que o Powershell não funciona com valores PATH que têm aspas (embora o CMD faça)? Editar o valor do caminho para incluir ponto e vírgula usando o modo manual - Edit the system environment variables -> Path -> Edit
- faz com que o Windows envolva automaticamente os caminhos necessários entre aspas, quebrando o Powershell. Então, isso não é um problema com meu programa ou situação - é um problema inerente com a forma como o Powershell processa o PATH.
Esse comportamento é intencional no Powershell? E há uma solução alternativa, ou terei que chegar a um acordo A. Envolvendo caminhos que contêm ponto e vírgula entre aspas e permitindo que esse comportamento de bug ocorra ou B. não permitindo ponto e vírgula em PATH?