传递参数时使用DOS启动命令有引号

时间:2012-02-13 20:08:44

标签: windows command-line batch-file

我对DOS启动命令有疑问。 我已经读过这个话题了: 使用DOS“start”命令将参数传递给已启动的程序 Using the "start" command with parameters passed to the started program

但我的问题有点不同。

我遇到了这个问题:我需要传递需要引用的路径。

例如,如果路径没有引号,则可以正常工作:

启动“”app.exe -option c:\ myapp \ myfile.txt

但如果路径有双引号则不起作用。

我的BATCH文件中有这一行:

启动“”myapp.exe -option%mypath%

当%mypath%包含双引号(名称中包含空格或其他字符的路径)时,start命令会返回非常奇怪的结果。

由于 桑德罗

2 个答案:

答案 0 :(得分:3)

通常情况下,使用带引号的参数不是问题,但如果您的app-path也有引号,则会出现问题。

然后您需要添加额外的CALL语句。

start "" app.exe -option c:\myapp\myfile.txt    - Works
start "" app.exe -option "c:\myapp\myfile.txt"    - Works
start "" "app.exe" -option c:\myapp\myfile.txt    - Works

start "" "app.exe" -option "c:\myapp\myfile.txt"    - Don't works
start "" CALL "app.exe" -option "c:\myapp\myfile.txt"    - Works

答案 1 :(得分:1)

这可能有所帮助,但这是一种方式的方法,可能需要稍作修改才能满足您的需求。

这个想法是:

  1. 将带引号的环境变量转储到具有预定义名称的文本文件。例如:“设置mypath2> withQt.bat”
  2. 使用Windows power shell或某些第三方工具查找并替换该文件中的引号。
  3. 创建另一个包含字符串“Set”
  4. 的文本文件(仅限一个步骤)
  5. 使用copy命令将步骤2中提到的文件附加到步骤3中创建的文件,并创建具有预定义名称的批处理文件。喜欢:copy base.bat + withQt.bat withtqt.bat
  6. 运行批处理文件,该文件创建另一个/用没有引号的值替换环境变量。
  7. 抱歉,我此时无法获得更优雅的东西。