命令在 "Run" 中有效,但在 "CMD" 或 "Call Shell" 中无效

Command works in "Run" but not in "CMD" or "Call Shell"

我有一个 .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 尝试同样的事情(我试过 CMDcmd /c)或 Call Shell()(我最终需要它在 VBA 中工作调用 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 中的文本输入: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 应该被创建并打开

我完全被这个搞糊涂了...

我无法重现您的问题。这应该工作。您的问题似乎在其他地方或在您的 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 window 打开并查看错误:

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")