【发布时间】:2018-08-09 01:42:46
【问题描述】:
这是我的args.bat 文件:
@echo off
python -c "import sys; print(sys.argv)" %*
我在这里调用 python 是因为我确切地知道如何解释输出,而不是猜测字符串中的引号
如果我从 cmd 调用它会发生以下情况:
>.\args.bat ^^^^^
More?
More?
['-c', '^']
>.\args.bat "^^^^^"
['-c', '^^^^^']
但这是 powershell 的作用:
PS> .\args.bat ^^^^^
['-c', '^']
PS> .\args.bat "^^^^^"
['-c', '^']
PS> .\args.bat '^^^^^'
['-c', '^']
PS> .\args.bat "'^^^^^'"
['-c', '^']
PS> .\args.bat '"^^^^^"'
['-c', '^^^^^']
为什么在从 powershell 调用批处理文件时必须双引号引用参数?
从powershell调用python不存在同样的问题:
PS> python -c "import sys; print(sys.argv)" "^^^^^"
['-c', '^^^^^']
PS> python -c "import sys; print(sys.argv)" '^^^^^'
['-c', '^^^^^']
PS> python -c "import sys; print(sys.argv)" ^^^^^
['-c', '^^^^^']
但是当从 powershell 从 python 调用批处理时仍然存在!
PS> python -c "import subprocess; subprocess.call(['args.bat', '^^^^^'])"
['-c', '^']
并从 cmd 中的 python 批处理:
> python -c "import subprocess; subprocess.call(['args.bat', '^^^^^'])"
['-c', '^']
【问题讨论】:
标签: powershell batch-file escaping