在powershell中逃避冒号的方法是什么?

时间:2016-01-13 00:05:10

标签: 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将其视为普通文本?

注意:我看了这个问题:Escaping a colon in powershell答案是关于.NET的,并没有回答我的问题(尽管问题非常相似)。

3 个答案:

答案 0 :(得分:2)

你不需要逃避那里的任何事情。 APPDATA环境变量已包含驱动器,因此您只需要

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

${env:systemdrive}:\${env:APPDATA}会创建路径C:\C:\Users\...,这确实无效。

答案 1 :(得分:2)

如果您import ImageOps import Image im=Image.open("b1.jpg") inverted = ImageOps.invert(im) box = inverted.getbbox() cropped_im = im.crop(box) cropped_im.save("b1_cropped.jpg") 这些环境变量,您会看到:

write-host

因此,您当前的尝试会扩展为PS C:\>write-host $env:systemdrive C: PS C:\>write-host $env:appdata C:\Users\****\AppData\Roaming 所以你需要的只是命令:

C:C:\Users\****\AppData\Roaming\...

答案 2 :(得分: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版本。