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")