Abrindo o PowerShell no diretório de trabalho atual a partir do registro

2

Esta questão é causada por um problema que enfrentei ao escrever responder . Estou invocando o PowerShell assim do registro:

C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe -NoExit -Command "cd '%v'"

As aspas duplas são necessárias para o parâmetro Comando para o PowerShell.exe, e as aspas simples são necessárias para lidar com qualquer espaço no nome do diretório de trabalho atual (CWD). / p>

O problema é que isso falha se o CWD contiver uma aspa simples em seu nome (obviamente, uma vez que prematuramente termina a cadeia do nome do diretório). Ao testar a partir do prompt de comando, encontrei uma solução alternativa para isso, que era especificar aspas simples two , de modo que a primeira funcionasse como um caractere de escape:

Tudo isso é bom, mas como corrijo esse problema de citação única quando o PowerShell é invocado com % v diretamente do registro? Uma maneira pode ser invocar um arquivo em lote com % v , substituir cada aspas no nome do diretório por duas aspas simples e invocar o PowerShell, por sua vez, mas isso é tal uma solução feia. Alguém tem uma ideia melhor?

    
por Karan 17.06.2013 / 04:48

2 respostas

1

Como mencionei na pergunta, é possível executar indiretamente o PowerShell usando um arquivo em lote que escapa de cada citação no nome do diretório.

Para invocar o arquivo de lote: "C:\PS Scripts\PS.bat" "%v"

Conteúdo do arquivo em lotes:

@set dn=%~1
@set dn=%dn:'=''%
@PowerShell -NoExit -Command "cd '%dn%'"

Ainda estou esperando por uma solução melhor.

    
por 18.06.2013 / 01:24
0

Então, minha ideia básica aqui é simplesmente ler o comando do stdin. O que pode ser alcançado usando -Command "-" . Um exemplo seria:

echo Set-Location "C:\Oliver's Test" | powershell -NoExit -Command "-"

Isso funciona bem, mas não temos mais um prompt. $PWD confirmará que estamos na pasta certa.

Então, tudo o que resta é redefinir o prompt. Não sei se há uma solução mais elegante, mas isso funciona:

echo Set-Location "C:\Oliver's Test";prompt "PS $PWD> " | powershell -NoExit -Command "-"

O código que encontrei originalmente on-line para definir o prompt usado $($PWD.ProviderPath) em vez de simplesmente $PWD . Eu não sei porque, mas talvez você descubra quando minha versão produz alguns erros estranhos; D

    
por 17.06.2013 / 12:36