如何在批处理文件中传递带有空格的命令行参数

27

我需要从命令行将参数行 AB CD 传递给批处理文件。该参数指的是一个文件名。

如果我使用 AB CD,脚本只会选择第一部分并返回 无法找到文件 AB.txt

如果我在我的参数周围加上引号,例如 "AB CD",那么我得到:

"AB CD".txt 
Illegal characters in path.
3个回答

43

您可以使用 %~1 而不是 %1

例如一个 test.bat 文件:

echo %~1

然后调用test "abc de"将显示:

abc de

我从这个问题中找到的内容是:如何将带有空格的路径作为参数传递给批处理文件。 - magdmartin

13

你可以做的是

>batch.bat "ab cd.txt"

当参数包含空格时,您可以将它们用引号括起来。


有两件事情,我不能在我的参数中添加扩展名,因为在我的批处理脚本中的其他地方使用了它,没有文件扩展名。其次,当我添加引号时,它们会添加到文件名中(请参见我的问题的最后一个示例)。 - magdmartin
好的,既然是这样,我猜问题不在于传递参数,而是批处理文件中的编程问题。您可以通过创建一个包含此简单行echo %1的简单批处理文件来检查此问题,这将回显完整名称“ab cd”。这意味着您正在正确地传递参数,但是在批处理文件的某个地方,它没有被正确处理。某些地方,它试图拆分并添加扩展名以重新创建文件名。 - Murtuza Kabul
同意。我实际上需要在我的脚本中使用 %~1 而不是 %1。 - magdmartin
1
你应该使用%p1来获取路径或者%n1来获取文件名,而不仅仅是使用%~1。 - Murtuza Kabul
1
or a combination of these - Murtuza Kabul

2
如果只接受一个参数,请使用"%*",无需引用参数。

myapp.cmd

@echo off
echo "%*"

测试一下

myapp single parameter with space

所选答案对我无效,但这个有效...经过两个小时的谷歌搜索。 - ErraticFox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接