簡體   English   中英

如何在Powershell中逃脫冒號?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM