Я не думаю, что вы можете заставить его работать таким образом: оператор & является частью оболочки командной строки, а не структур CreateProcess или ShellAPI.
Я вижу несколько способов обойти это:
- вызовите CMD.exe и передайте командную строку в качестве параметра. (т. е. "% ComSpec% / c" и прочее)
- Напишите партию на лету и выполните ее.
- Просто напишите два вызова в WshShell.Exec вместо одного. Это, вероятно, лучше, так как в любом случае вы можете проверить результат каждой отдельной части процесса. Вы можете даже сделать копию в сценарии вместо вызова xcopy для дополнительной проверки ошибок и регистрации.
Вот пример кода о том, как скопировать папку и затем скопировать другую в VBScript:
Dim WshShell, oExec, oFS, oF
szSourcePath="c:\tmp\testfolderSrc"
szDestinationPath="c:\tmp\testfolderDest"
szDestinationZip="c:\tmp\final.zip"
bOverwrite=true
' Create objects
Set oFS = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
' cleanup target folder
if oFS.FolderExists(szDestinationPath) then
oFS.DeleteFolder szDestinationPath, true
end if
' Create target folder
set oF = oFS.CreateFolder(szDestinationPath)
' Copy content of the source folder to the target folder
oFS.CopyFolder szSourcePath & "\*", szDestinationPath, bOverwrite
' delete old zip
if oFS.FileExists("c:\myzip.zip") then
oFS.deleteFile("c:\myzip.zip")
end if
wshShell.CurrentDirectory = "c:\tmp\" ' set current directory to this
Set oExec = WshShell.Exec("c:\program files\winzip\winzip32.exe -min -a c:\myzip.zip" )
Do While oExec.Status = 0
WScript.Sleep 100
Loop