命令在 "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 尝试同样的事情(我试过 CMD
和 cmd /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")
我有一个 .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 尝试同样的事情(我试过 CMD
和 cmd /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")