1

我有一个 .exe 文件,我想用一些参数运行,当我打开“运行”(windows+R)并输入以下内容 C:\reporting\Release\Report_GenerationV0 Alarm 1-1-1 00:00:00 1-1-1 00:00:00 DTPUN02-01\ADMINISTRATOR时,程序运行完美。

但是,如果我通过 CMD(我尝试过)或(我最终需要它在 VBA Call Shell 中工作)尝试同样的事情CMDcmd /c它就Call Shell()不起作用。

运行中的文本输入:C:\reporting\Release\Report_GenerationV_0.exe Alarm 1-1-1 00:00:00 1-1-1 00:00:00 DTPUN02-01\ADMINISTRATOR - WORKS

CMD 中的文本输入:C:\reporting\Release\Report_GenerationV_0.exe Alarm 1-1-1 00:00:00 1-1-1 00:00:00 DTPUN02-01\ADMINISTRATOR--不起作用

CMD 中的文本输入:cmd /c C:\reporting\Release\Report_GenerationV_0.exe Alarm 1-1-1 00:00:00 1-1-1 00:00:00 DTPUN02-01\ADMINISTRATOR--不起作用

调用 Shell 命令:Call Shell("C:\reporting\Release\Report_GenerationV_0.exe Alarm 1-1-1 00:00:00 1-1-1 00:00:00 DTPUN02-01\ADMINISTRATOR")--不起作用

CMD或Call Shell中没有错误,光标显示加载图标一段时间然后停止,没有任何反应,理想情况下在我的程序执行结束时应该创建并打开一个PDF

我完全被这个弄糊涂了……

4

1 回答 1

1

我无法重现您的问题。这应该有效。您的问题似乎在其他地方或在您的 exe 文件中:

我用下面的代码测试

Sub test()
    Call Shell("D:\temp\test.bat Alarm 1-1-1 00:00:00 1-1-1 00:00:00 DTPUN02-01\ADMINISTRATOR", vbNormalFocus)
End Sub

以及以下test.bat列出参数:

@echo off
setlocal enabledelayedexpansion

set argCount=0
for %%x in (%*) do (
   set /A argCount+=1
   set "argVec[!argCount!]=%%~x"
)

echo Number of processed arguments: %argCount%

for /L %%i in (1,1,%argCount%) do echo %%i- "!argVec[%%i]!"

pause

结果是这样的:

在此处输入图像描述

如果您的路径中有任何空格,请确保用引号将其括起来,如下所示:

Call Shell("""D:\temp\test.bat"" Alarm 1-1-1 00:00:00 1-1-1 00:00:00 DTPUN02-01\ADMINISTRATOR", vbNormalFocus)

还可以尝试以下操作以保持 cmd 窗口打开并查看错误:

Call Shell("cmd /k ""C:\reporting\Release\Report_GenerationV_0.exe"" Alarm 1-1-1 00:00:00 1-1-1 00:00:00 DTPUN02-01\ADMINISTRATOR")
于 2020-09-07T08:34:40.237 回答