基本上我有一个使用excel vba中的runcmd函数运行的批处理文件
Function runCmd(fileCommand As String) As Boolean
On Error GoTo Err_Hnd
Dim strCmdPath As String
strCmdPath = VBA.Environ$("COMSPEC")
VBA.ChDir "C:\Users\" & Environ$("Username") & "\"
VBA.Shell strCmdPath & " /c" & fileCommand, vbNormalFocus
runCmd = True
Exit Function
Err_Hnd:
runCmd = False
End Function
file命令是批处理文件的完整路径。当我运行此代码时,我收到以下错误
'C:\ Users \ UserName \ Desktop \ Move.bat'无法识别为内部或外部命令,可运行程序或批处理文件。
但是,当我在 runCmd = True 行放置一个断点并使用F8或F5运行代码时,它可以完美地运行。不知道为什么会这样。
编辑:在尝试了ChrisProsser的代码后,我得到了一个稍微不同的错误。 cmd提示符说 -1 dir(s)被移动了。找不到批处理文件。
它只移动了1个文件夹。
不幸的是,这不是逐字的,因为我无法再次重新创建此错误,并且第一次没有记下错误。
所以更多信息 - 批处理文件实际上是一个文本文件,其中包含移动代码,该代码在运行时转换为批处理文件,并在执行此函数runCmd后返回到文本文件。 因此,这个过程是
这会导致错误吗?
答案 0 :(得分:0)
我不确定为什么这会在单步执行时起作用,但如果一次执行则不行,但我会尝试添加一个步骤来设置命令字符串然后执行它,例如。
Function runCmd(fileCommand As String) As Boolean
On Error GoTo Err_Hnd
Dim strCmdPath As String
Dim strCmd as String
strCmdPath = VBA.Environ$("COMSPEC")
VBA.ChDir "C:\Users\" & Environ$("Username") & "\"
strCmd = strCmdPath & " /c" & fileCommand, vbNormalFocus
VBA.Shell strCmd
runCmd = True
Exit Function
Err_Hnd:
runCmd = False
End Function