直接引用%~dp0不会忽略文件路径

时间:2017-11-15 10:25:07

标签: batch-file

我有一个脚本,其中有3个参数,其中两个是路径。我想从.bat文件中调用它。

python myscript.py "%~dp0inputs/" "%~dp0outputs/" "foo"

如果我调用一个只使用上面的行打印argv的虚拟脚本,我会得到预期的结果,即使是包含空格的路径:

myscript.py
C:\path\containing spaces\inputs/
C:\path\containing spaces\outputs/
foo

但是,如果我使用它(即参数1的%~dp0,引号之间没有其他内容):

python myscript.py "%~dp0" "%~dp0outputs/" "foo"

然后当路径包含空格时它表现得很奇怪:

myscript.py
C:\path\containing spaces" C:\path\containing
spaces\outputs/ foo

似乎报价没有得到妥善处理 - 我做错了什么?

2 个答案:

答案 0 :(得分:1)

这是因为引号被传递到python脚本中。 %~dp0以\ _字符结尾。

Python认为\逃脱双引号 - 很有趣。

因此,“%~dp0”作为

传递给脚本
"C:\temp\containing spaces\"

Python将尾随\视为转义引号,因此它会合并参数。

它不应该这样做 - 但确实如此。

您可以删除尾随\,或添加另一个。 其中任何一个都有效:

python myscript.py "%~dp0/" "%~dp0outputs/" "foo"
python myscript.py "%~dp0\" "%~dp0outputs/" "foo"

答案 1 :(得分:0)

尝试使用设置来批量调用您的路径。 (以下示例)

{{1}}