0

ファイルを別のシステムにコピーする小さなプログラムを作成しようとしています。システムの名前は以前に選択されています (変数 = "testsystem" です)。私はこのサブと関数を持っています:

Sub tst
    Dim copythis
    copythis = "xcopy.exe /Y c:\temp\version.bat " & testsystem & "\temp"
    Set objShell = CreateObject("Wscript.Shell")
    Msgbox AddQuotes(copythis)
    objShell.Run AddQuotes(copythis)
End Sub

Function AddQuotes(strInput)
    AddQuotes = Chr(34) & strInput & Chr(34)
End Function

messageBox には、必要な文字列 (完全なコマンド) が正確に表示されます。また、コマンドを手動で実行すると動作します:

C:\temp>xcopy /Y c:\temp\version.bat \\testsystem3\temp
C:\temp\version.bat
1 File(s) copied

私は今2日間これと戦っています。どこかで引用符が欠落していると思いますが、理解できません。

ありがとうございました!

4

1 に答える 1

3

引用符を見逃すことはありません。代わりに、多くの引用符が必要です。関数は、実行される前に、コマンドの周りに追加の二重引用符を配置します。これにより、コマンド文字列全体が単一のファイル名 (スペースを含む) として解釈されます。cmd次のようにコマンドを実行すると、まったく同じ結果が得られます。

C:\temp>"xcopy /Y c:\temp\version.bat \\testsystem3\temp"
The filename, directory name, or volume label syntax is incorrect.

この行を変更するだけです

objShell.Run AddQuotes(copythis)

これに

objShell.Run copythis

そして問題は消えるはずです。

ダブルクォートを追加したい場合は、次のように追加します:

copythis = "xcopy.exe /Y " & AddQuotes("c:\temp\version.bat") & " " _
  & AddQuotes(testsystem & "\temp")
于 2013-04-03T18:51:42.793 に答える