HTA (VBScript) - Shell.Run с использованием переменных

Я пытаюсь создать небольшую программу, которая копирует файл в другую систему. имя системы предварительно выбрано (это переменная = "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 дней. Я предполагаю, что я пропускаю некоторые цитаты где-то, но не могу понять это.

Спасибо!

1 ответ

Решение

Вы не пропускаете кавычки, вместо этого у вас есть много из них. Ваша функция помещает дополнительные двойные кавычки вокруг команды перед ее выполнением. Это приводит к тому, что вся командная строка интерпретируется как одно имя файла (с пробелами в нем). Вы получите точно такой же результат при запуске команды в 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")
Другие вопросы по тегам