2016-01-13 2 views
1

я следующий PowerShell в файл сценария:Каков способ избежать толстой кишки в PowerShell?

cd "$env:systemdrive:\$env:APPDATA\Mozilla\Firefox\Profiles\*.default" 

Expanded, я хочу, чтобы это сделать что-то похожее на это:

cd "C:\Users\Bob\AppData\Roaming\Mozilla\Firefox\Profiles\f1wkii3l.default" 

Но когда я запускаю его, я получаю:

cd : Cannot find drive. A drive with the name '\C' does not exist.

Я угадываю, что двоеточие, которое я положил туда, было в конце C:\, вызывает проблемы.

Я пробовал:

cd "${env:systemdrive}:\${env:APPDATA}\Mozilla\Firefox\Profiles\*.default" 

Но тогда я получаю ошибку:

cd : Cannot find a provider with the name 'C'.

Как я могу избежать толстой кишки, так что PowerShell видит его как обычный текст?

ПРИМЕЧАНИЕ. Я рассмотрел этот вопрос: Escaping a colon in powershell, и ответ все о .NET и не отвечает на мой вопрос (хотя вопрос очень похож).

ответ

2

Другие ответы для устранения неполадок и для вашей задачи. Одно из предложений, которое у меня есть, и то, что я считаю лучшим, использует Join-Path в любое время, когда вы имеете дело с путями, поэтому вам не нужно беспокоиться о концевых или начальных разделителях пути.

Этот пример

$d1 = "${env:APPDATA}\Mozilla\Firefox\Profiles\*.default" 
$d2 = Join-Path ${env:APPDATA} "\Mozilla\Firefox\Profiles\*.default" 
$d3 = Join-Path ${env:APPDATA} "Mozilla\Firefox\Profiles\*.default" 
Write-Output "d1 = '$d1'" 
Write-Output "d2 = '$d2'" 
Write-Output "d3 = '$d3'" 

Производит

d1 = 'C:\Users\xxx\AppData\Roaming\Mozilla\Firefox\Profiles\*.default' 
d2 = 'C:\Users\xxx\AppData\Roaming\Mozilla\Firefox\Profiles\*.default' 
d3 = 'C:\Users\xxx\AppData\Roaming\Mozilla\Firefox\Profiles\*.default' 

Все приемлемы, и я, как правило, использовать версию d3 в своих собственных скриптов.

+0

Это должен быть принятый ответ, так как Join-Path отвечает на второстепенный вопрос о том, как избежать путей с помощью Powershell (без использования методов .Net) – JGreenwell

2

Вам не нужно ничего скрывать. Переменная APPDATA среда уже включает в себя диск, так что вам нужно только

cd "${env:APPDATA}\Mozilla\Firefox\Profiles\*.default" 

${env:systemdrive}:\${env:APPDATA} бы создать путь C:\C:\Users\..., который действительно является недействительным.

2

Если вы write-host эти переменные окружения, вы увидите, что:

PS C:\>write-host $env:systemdrive 
C: 

PS C:\>write-host $env:appdata 
C:\Users\****\AppData\Roaming 

Так текущая попытка расширяется C:C:\Users\****\AppData\Roaming\... Так все, что вам нужно, это команда:

cd "$env:Appdata\Mozilla\Firefox\Profiles\*.default" 
Смежные вопросы