[英]What is the way to escape colon in powershell?
我在腳本文件中具有以下Powershell:
cd "$env:systemdrive:\$env:APPDATA\Mozilla\Firefox\Profiles\*.default"
擴展后,我希望它執行以下操作:
cd "C:\Users\Bob\AppData\Roaming\Mozilla\Firefox\Profiles\f1wkii3l.default"
但是當我運行它時,我得到:
cd:找不到驅動器。 名稱為“ \\ C”的驅動器不存在。
我猜我在C:\\
末尾插入的冒號引起了問題。
我試過了:
cd "${env:systemdrive}:\${env:APPDATA}\Mozilla\Firefox\Profiles\*.default"
但是然后我得到了錯誤:
cd:找不到名稱為“ C”的提供程序。
我如何才能逃脫冒號,以便Powershell只能將其視為普通文本?
注意:我看了這個問題: 在powershell中轉義冒號,答案全是關於.NET的,它不能回答我的問題(盡管問題非常相似)。
您不需要在那里逃脫任何東西。 APPDATA
環境變量已經包含驅動器,因此您只需要
cd "${env:APPDATA}\Mozilla\Firefox\Profiles\*.default"
${env:systemdrive}:\\${env:APPDATA}
將創建路徑C:\\C:\\Users\\...
,這實際上是無效的。
如果您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"
其他答案對於故障排除和手頭的任務也是有效的。 我有一個建議,也是我認為的最佳實踐,它是在您處理路徑時都使用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
版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.