2017-10-19 21 views
0

Je tente actuellement de créer une commande qui ouvre un administrateur Powershell à partir du menu contextuel du clic droit. Pour le contexte, les commandes du menu contextuel s'exécutent dans CMD.Citation littérale dans "Powershell Start-Process -ArgumentList"

Mon problème est que j'essaie de cd dans le répertoire où le clic droit se produit. La commande ci-dessous fonctionne très bien pour la plupart des répertoires, mais si le chemin du répertoire contient un espace, alors il essayera seulement de se déplacer dans la partie du chemin avant l'espace, en jetant une erreur. Ma compréhension est que le répertoire courant est passé par %V mais quand j'exécute la commande echo %V en utilisant le même processus, il divise les chemins avec un espace sur 2 lignes, donc je suppose que les parties du chemin sont stockées dans des chaînes séparées?

Powershell -noexit "Start-Process 'C:\Users\<me>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell\Windows PowerShell.lnk' -ArgumentList '-noexit','Set-Location -literalPath `"%V`"' -Verb RunAs" 

J'ai mis à jour la commande ci-dessus pour correspondre à une suggestion ci-dessous, et quand un clic droit sur le bureau (qui a travaillé auparavant en raison d'un manque d'espaces) je reçois maintenant l'erreur suivante:

Set-Location : Cannot find path 'C:\Users\<me>\Desktop`' because it does not exist. 
At line:1 char:1 
+ Set-Location -literalPath `C:\Users\<me>\Desktop` 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo   : ObjectNotFound: (C:\Users\<me>\Desktop`:String) [Set-Location], ItemNotFoundException 
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand 

Notez que dans les deux blocs de code ci-dessus, <me> est mon nom d'utilisateur réel. Je me suis arraché les cheveux en essayant de placer des guillemets sur le chemin, mais je n'arrive pas à demander à Powershell de mettre les guillemets parce que j'utilise déjà des guillemets simples et doubles.

Toute aide serait grandement appréciée, merci d'avance.

Edit:

Pour ceux qui cherchent encore une réponse, j'ai couru le script Powershell suivante pour ajouter des commandes fonctionnelles à mon menu contextuel:

$menu = 'Open Windows PowerShell Here as Administrator' 
$command = "$PSHOME\powershell.exe -NoExit -NoProfile -Command ""Set-Location '%V'""" 

'directory', 'directory\background', 'drive' | ForEach-Object { 
    New-Item -Path "Registry::HKEY_CLASSES_ROOT\$_\shell" -Name runas\command -Force | 
    Set-ItemProperty -Name '(default)' -Value $command -PassThru | 
    Set-ItemProperty -Path {$_.PSParentPath} -Name '(default)' -Value $menu -PassThru | 
    Set-ItemProperty -Name HasLUAShield -Value '' 
} 

La réponse a été trouvée de How do I start PowerShell from Windows Explorer?

Répondre

1

Si vous voulez éviter les problèmes d'espace, vous pouvez réutiliser " en l'échappant avec ` dans une chaîne.

Par exemple:

$command = "Set-Location `"C:\temp\test space`"" 

chaîne deviendra cela et des espaces seront traités correctement:

Set-Location "C:\temp\test space"

+0

Peut-être que je n'étais pas clair dans la question, désolé. Mon problème est avec les espaces dans le chemin% V, l'exécutable Powershell est très bien. J'ai essayé de placer "" autour de% V et j'ai toujours reçu une erreur – Spanner1122

+0

Quelle est l'erreur exacte? Avez-vous gardé le '' 'autour du' "? – Manu

+0

J'ai mis à jour ma question ci-dessus pour inclure l'erreur et la commande complète que j'ai utilisée après les modifications. – Spanner1122