выполнение двух функций с помощью wshshell - PullRequest
0 голосов
/ 25 марта 2010

У меня есть две разные функции (копировать и почтовый индекс) для б выполнено. Могу ли я сделать это с помощью одного сценария wshshell. Я попробовал ----

Dim WshShell, oExec,g,h
h="D:\d"

g="xcopy " & h & " " & "D:\y\ /E & cmd /c cd D:\c & D: & winzip32.exe -min -a D:\a"
Set WshShell = CreateObject("WScript.Shell")

Set oExec = WshShell.Exec(g)

Do While oExec.Status = 0
     WScript.Sleep 100
Loop

WScript.Echo oExec.Status

это не работает. Хотя отдельные программы, например, g = "xcopy" & h & "" & "D: \ y \ / E" и g = "cmd / c cd D: \ d & D: & winzip32.exe -мин -а D: \ а "работает. прошу прощения за проблему форматирования. любая помощь приветствуется.

1 Ответ

0 голосов
/ 25 марта 2010

Я не думаю, что вы можете заставить его работать таким образом: оператор & является частью оболочки командной строки, а не структур CreateProcess или ShellAPI.

Я вижу несколько способов обойти это:

  1. вызовите CMD.exe и передайте командную строку в качестве параметра. (т. е. "% ComSpec% / c" и прочее)
  2. Напишите партию на лету и выполните ее.
  3. Просто напишите два вызова в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...