从命令行使用path名作为参数时发生Excel错误

我正在尝试从命令行启动特定的Excel文档,并以文件path的forms传递variables。 在启动Excel工作表上运行一个macros。 这个文件path可能包含空格,但是当Excel解释这个时,我相信它试图打开一个空格后的每个部分作为一个新的工作簿。 这会导致程序运行后出现许多错误警告,因为它显然不能从子string创build文件。

batch file看起来像这样

echo %~1 start excel.exe %USERPROFILE%\Desktop\Compare.xlsm /e/%1% pause 

编辑:澄清。 batch file在文件被拖放时被激活。 被丢弃的文件的path然后被存储在%1variables中。 如果此文件path具有空格,则在每个空格之后,Excel将假定这是一个新的工作表并尝试将其打开。 包含要使用拖动文件path的macros的Compare.xlsm调用将正常工作,因为它始终在桌面上。 因此,我的问题是如何让Excel将存储在%1中的整个path名称用作一个命令行参数,而不是多次调用来打开新的工作簿。

如果batch file上使用的文件不包含任何空格,则不会发生错误。 有什么办法摆脱错误时使用可能有空格的文件path,例如C:\ Users \ My Documents \ foobar.txt

试试这个( TRIED AND TESTED

 echo %~1 start "excel.exe" "%USERPROFILE%\Desktop\Compare.xlsm" /e/%1% pause 

注意“Excel.Exe”附近的引号和文件path?

另一个例子

 echo %~1 start "excel.exe" "%USERPROFILE%\Desktop\Blah Blah.xlsm" /e/%1% pause 

我假设你正在运行.Bat文件中的代码

正如Sid所说,任何包含空格的path都必须被引用。

所以要使用一个如C:\我的文档\ fubar.txt的pth你会有这样的:

 "C:\My Documents\fubar.txt" 

在你的例子中:

回声

 %~1 start excel.exe "%USERPROFILE%\Desktop\Compare.xlsm" /e/%1% pause 

编辑:当使用一个variables作为path,你需要包括在引号variables!