【问题标题】:How can I pass a file to an executable, the way dragging-n-dropping allows?如何通过拖放允许的方式将文件传递给可执行文件?
【发布时间】:2014-04-09 01:51:16
【问题描述】:

考虑一下我有以下几点:

  • 一个 Excel 工作簿,生成一个 .txt 文件(通过宏)。
  • 一个可执行文件 (.exe) 可以解析这个 .txt 文件。

我的目标是编写以下算法:

  • 让用户在工作表中输入他的数据。
  • 根据用户输入的内容准备.txt文件。
  • 将新创建的.txt 文件传递​​给外部程序(.exe)。

现在,前两个步骤完美运行,我可以生成正确的.txt 文件。当我需要将它传递给外部可执行文件时,问题就来了。以下是已尝试和观察到的内容:

  • 使用"C:\path\to\program.exe" "C:\path\to\file.txt" 调用Shell()(编辑:作为单个字符串);很简单,但这不起作用:外部.exe 不喜欢被赋予路径。我还尝试将命令直接输入到 Windows 的 Execute 实用程序中:相同。 似乎给程序提供.txt 的路径是不够的。

  • .txt 文件拖到程序的.exe 上即可!外部可执行文件正常工作。 在这里,就好像我将“文件”传递给了程序,而不仅仅是它的路径。作为一个 UNIX 用户,这对我来说听起来很无意义(没有流或管道的概念),所以也许我在这里遗漏了一些东西......

现在,这是我的问题。将文件拖放到可执行文件上时,Windows 如何“翻译”它?显然,它并没有将其翻译成“将文件的路径作为程序的第一个参数传递”。如何将.txt 文件传递​​给可执行程序,而不像我第一次调用Shell() 那样传递它的路径?

其他一些注意事项:

  • 我在 Windows 7 上使用 Microsoft Office Excel 2010。我已经快要死了,谢谢你的关心。
  • 我说的这个外部.exe 不能修改和重新编译(这太棒了),这很棘手。无论发生什么,我都必须照原样使用它。
  • 如果您给我正确的命令/修复,使用Shell() 不是问题。我也尝试在VBA.CreateObject("WScript.Shell") 上调用Run,结果相同。

【问题讨论】:

    标签: excel vba shell


    【解决方案1】:

    现在,这是我的问题。将文件拖放到 可执行文件,Windows如何“翻译”它?显然,它不 将其翻译为“将文件的路径作为程序的第一个传递 参数”。

    正是这样做的。创建批处理文件:

    @echo off
    echo You passed parameter: %1
    pause
    

    另存为test.bat

    在文件资源管理器中浏览到它,然后将一些东西拖放到它上面:

    以前的cmets:

    看起来您必须将路径和文件名作为一个参数发送,例如:

    Shell("C:\path\to\program.exe C:\path\to\file.txt")
    

    或者如果路径中有空格,则可能:

    Shell("""C:\path\to\program.exe"" ""C:\path\to\file.txt""")
    

    http://social.msdn.microsoft.com/Forums/en-US/a3a3d1a7-5c9a-4c91-ab96-41d367eac2fb/using-shell-function-in-vba-how-do-i-pass-a-parameter?forum=accessdev

    【讨论】:

    • Shell() 例程只有一个参数分配给命令,即使我想也不能将它作为两个传递。我尝试过添加额外的空格、额外的引号等所有内容;它不会把我带到任何地方。另外:如果问题与Shell() 调用严格相关,则使用 Windows Execute 实用程序将文件路径传递给程序不会失败;)
    • @JohnWHSmith 好吧,我读到“使用两个不同的字符串调用 shell()”与您的预期不同。我已经更新了我的答案,演示了资源管理器拖放只是将文件路径作为第一个参数传递。此外,我的答案中的链接是人们在做你正在尝试的事情 - 使用 Shell() 调用带有路径的程序和带有路径作为第一个参数的文件。您是否有可能在文件名中有一些奇怪的东西 - 超过 255 个字符路径或奇数字符?你能发布一个真实的例子而不是编辑过的“C:\path\to\program.exe”吗?
    • 关于最近的编辑:我明天试试,我今天没有可用的 Windows。如果它导致修复,我会考虑接受答案。谢谢你的示范! (实际上,这可能与一些 current directory 差异有关,我可能首先需要一些 ChDir,因为我不知道 .exe 如何在内部处理路径)。关于我的示例:我尝试使用更简单的路径,例如 C:\myexe.exeC:\mytext.txt,没有区别。
    • 接受的答案。即使它没有直接解决我的问题(它 ChDir 问题,.exe 比我想象的要求更高),您的回答仍然对应于“Windows 如何翻译 Drag- n-下降?” ;)
    猜你喜欢
    • 1970-01-01
    • 2020-04-10
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2010-09-12
    相关资源
    最近更新 更多