我在脚本文件中有以下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的,并没有回答我的问题(尽管问题非常相似)。
答案 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
版本。