阻止cmd start命令打开包含空格作为文件的参数

时间:2014-02-05 07:53:26

标签: excel vba cmd

我有一个Excel宏,它在以下列方式传递时接受命令行参数:

start excel.exe c:\cmdr.xlsm -param1 -param2 -param3

Sub Auto_Open()
Debug.Assert False

Dim parameters As Variant
Dim i As Integer

parameters = CmdLineToVariant

For i = 1 To UBound(parameters)
MsgBox ("Your parameter " & i & " was " & parameters(i))
Next i

End Sub

Public Function CmdLineToVariant() As Variant

Dim Buffer() As Byte
Dim StrLen As Long
Dim CmdPtr As Long
Dim line As String
Dim lineSplitted As Variant
Dim parameters As String
Dim i As Integer

CmdPtr = GetCommandLine()
If CmdPtr > 0 Then
  StrLen = lstrlenW(CmdPtr) * 2
  If StrLen > 0 Then
    ReDim Buffer(0 To (StrLen - 1)) As Byte
    CopyMemory Buffer(0), ByVal CmdPtr, StrLen

    line = Buffer
    lineSplitted = Split(line, "-")

    CmdLineToVariant = lineSplitted
  End If
End If

End Function

当参数名称中没有空格时它工作正常,但是当有像这样的空格时我会遇到一些烦人的错误

start excel.exe c:\cmdr.xlsm -param 1 -param 2 -param 3

我的宏成功完成后,出现“1.xlsx无法找到”,“无法找到2.xlsx”等错误,最后“找不到3.xlsx”。

有没有办法防止出现这些错误,同时保留传递参数的相同语法和逻辑?

1 个答案:

答案 0 :(得分:1)

通常,"quote parameters"

start有一个怪癖,但第一个"quoted argument"被用作窗口标题。

使用

start "" excel.exe c:\cmdr.xlsm "-param 1" "-param 2" "-param 3"

或可能

start "" excel.exe c:\cmdr.xlsm -"param 1" -"param 2" -"param 3"

(未经测试 - OP未提供参数是什么)。