如何将文件传递给可执行文件,拖动n-drop允许的方式?
考虑我有以下几点:
- 一个Excel工作簿,它通过一个macros生成一个.txt文件。
- 一个可执行文件(
.exe
),它可以parsing这个.txt文件。
我的目标是编程以下algorithm:
- 让用户在工作表中input他的数据。
- 根据用户input的内容准备
.txt
文件。 - 将新创build的
.txt
文件传递给外部程序(.exe
)。
现在,前两步完美工作,我可以生成正确的.txt
文件。 当我需要将它传递给外部可执行文件时,问题就出现了。 以下是试用和观察的内容:
-
调用
Shell()
:"C:\path\to\program.exe" "C:\path\to\file.txt"
(编辑: 作为单个string ); 足够简单,但这不起作用:外部.exe
不喜欢被给予一个path。 我也尝试直接input命令进入Windows的Execute
实用程序:相同。 这似乎是给程序path.txt
是不够的。 -
将
.txt
文件拖到程序的.exe
工程中! 外部可执行文件正常工作。 在这里,就好像我已经将“文件”传递给了程序,而不仅仅是它的path 。 作为一个UNIX用户,这听起来对我来说是相当无意义的(没有stream或pipe道的概念),所以也许我在这里错过了一些东西…
现在,这是我的问题。 将文件拖放到可执行文件时,Windows如何“翻译”它? 显然,它不会将其转换为“将文件path作为程序的第一个parameter passing” 。 如何将.txt
文件传递给可执行程序,而不用像第一次使用Shell()
那样传递它的path?
其他一些说明:
- 我在Windows 7上使用Microsoft Office Excel 2010。 我已经死了,谢谢你的关心。
- 这个外部的
.exe
我说的无法修改和重新编译(这将是可怕的),这是棘手的事情。 无论发生什么事情,我都必须照原样使用它。 - 使用
Shell()
不是一个问题,如果你给我正确的命令/修复。 我也尝试调用VBA.CreateObject("WScript.Shell")
上的Run
,结果相同。
现在,这是我的问题。 将文件拖放到可执行文件时,Windows如何“翻译”它? 显然,它不会将其转换为“将文件path作为程序的第一个parameter passing”。
它确实如此。 创build一个batch file:
@echo off echo You passed parameter: %1 pause
保存为test.bat
在文件浏览器中浏览到它,并拖放一些东西到它上面:
先前的评论:
看起来你必须发送path和文件名作为一个参数,例如:
Shell("C:\path\to\program.exe C:\path\to\file.txt")
或者如果path中有空格,也许:
Shell("""C:\path\to\program.exe"" ""C:\path\to\file.txt""")