防止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无法找到","找不到1.xlsx," 2.xlsx找不到",最后找不到" 3.xlsx"。

是否有一种方法可以防止这些错误在保留相同的语法和传递参数的逻辑时出现?

通常, "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不提供参数是什么)。

最新更新