2012-02-13 80 views
3

我有一个关于DOS启动命令的问题。 我已经看过这个话题: 使用DOS“开始”与传递给所启动的程序 Using the "start" command with parameters passed to the started program当传递参数有引号时使用DOS启动命令

参数的命令,但我的问题是有点不同。

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

例如,如果路径中没有报价这工作得很好:

开始“” APP.EXE - 选项C:\ MYAPP \ myfile.txt的

但如果路径有双引号它不作品。

我有这条线在我的批处理文件:

开始“→”程序myapp.exe -option%mypath中%

当%mypath中包含%双引号(即在名称中使用空格或其他字符路径)启动命令返回非常奇怪的结果。

感谢 桑德罗

+3

你也许应该看看http://stackoverflow.com/questions/562038/escaping-double-quotes-in-batch-script – 2012-02-13 20:12:00

回答

1

这可能会有所帮助,但它是一个位的路周围方法和轻微的修改可能需要以满足您的需要。

的想法是:

  1. 自卸其中有报价与预定义的名称的文本文件中的环境变量。如:“set mypath2> withQt.bat”
  2. 使用窗口power shell或某些第三方工具来查找并替换该文件中的引号。
  3. 创建包含字符串“Set”的另一个文本文件
  4. 使用copy命令将步骤2中提到的文件与步骤3中创建的文件相加,并创建一个具有预定义名称的批处理文件。像:copy base.bat + withQt.bat withtqt.bat
  5. 运行批处理文件,该文件创建另一个/用不带引号的值替换环境变量。

对不起,我目前无法得到更优雅的东西。

2

通常,在引号中使用参数并不是问题,但如果您的应用程序路径也有引号,则会出现问题。

然后您需要添加额外的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 
+0

啊真好,你正在运行的“呼叫”命令,然后传递程序和参数。 Google员工注意:-option不是通用答案的一部分,它只是在那里,因为它在提问者的问题中。 – Andrew 2017-08-05 02:15:31

+0

**还要注意,您可以事先调用cd“path”。** start命令有一个/ d选项来设置它调用的命令/进程启动的工作目录。 – Andrew 2017-08-05 02:16:22