DOS Batch和Powershell的转义符
之前拿appveyor编译hadoop试手的时候,突然发现了一个严肃的问题:Windows下没有自带默认的命令行下载工具。之前用Windows的时候一直是图形界面操作,需要敲命令的时候才打开cmd
,然而我需要指明从网络上下载某个文件
之后看到Stackoverflow上有人推荐用Powershell,Powershell有内置的下载功能,然后去试了一下。觉得也是时候与时俱进一下了。
示例如下:
$cloent = new-object System.Net.WebClient
$client.DownloadFile("https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protoc-2.5.0-win32.zip", "C:\protoc-2.5.0-win32.zip")
顺带码一下操作zip文件的Compress-Archive
/ Expand-Archive
命令。
结果发现set
不能用了,对应的Get-Value
命令里由缺失了不少环境变量,最后决定换回cmd,因为不想将一个工作拆分为cmd和Powershell两个脚本= =
然后决定使用cmd调用Powershell,问题出在这里:Powershell函数的参数需要双引号。cmd有转义符吗?
又是一个让人沉思的问题。咕果一下之后发现,有是有,不过是^
(Ctrl
+6
),而且似乎对双引号没有作用。
此时顺便查了一下,Powershell的转义符是`
(esc
下面那个),不过由于Powershell相对于cmd是个新产品,功能还是能正常使用的。
最后解决cmd向Powershell传递双引号的方法是 连着三个双引号"""
。特别神奇,不知道为什么。
管他的,只要能用就行了