2010-03-09 5 views
0

Exécution de l'vbscript suivant pour appeler svnadmin dump échoue (pas de décharge est en cours de création)vbscript appelant svnadmin vidage

Set objShell = CreateObject("WScript.Shell") 
Set objShellExec = objShell.Exec("svnadmin dump C:\svn_repos > C:\fullbackup") 

j'ai découvert d'un autre poste, svn dump fails with WScript.Shell que je devais créer un nouvel interpréteur de commandes en utilisant cmd suit:

Set objShellExec = objShell.Exec("%comspec% /c" & "svnadmin dump C:\svn_repos > C:\fullbackup") 

Cela a créé avec succès la décharge, mais je ne pourrais jamais lire les informations de sortie (par exemple * révision 100. * Dumped révision 101. Dumped, etc.). J'ai essayé

Do While objWshScriptExec.Status = 0 
    Wscript.Echo objShellExec.StdOut.Readline 
    Wscript.Echo objShellExec.StdErr.Readline 
    WScript.Sleep 100 
Loop 

mais rien ne s'affiche jamais. Puis-je savoir comment je peux lire les informations de sortie et pourquoi j'ai besoin de créer un nouvel interpréteur de commandes en utilisant "% comspec%/c" avant que la commande svnadmin dump s'exécute correctement? Merci.

Cordialement, Dexton

Modifié Code:

Set objShell = CreateObject("WScript.Shell") 

Set objFS = CreateObject("Scripting.FileSystemObject") 

strOutput = "c:\svn_backup\fullbackupa" 

Set objOutFile = objFS.CreateTextFile(strOutput,True) 

Set objShellExec = objShell.Exec("%comspec% /c " & "svnadmin dump C:\svn_repos") 

Do While objShellExec.Status = 0 
    stdoutline=objShellExec.StdOut.Readline 
    'Wscript.Echo stdoutline 'echo to standard output 
    Wscript.Echo objShellExec.StdErr.Readline 
    objOutFile.WriteLine(stdoutline & vbCrLf) 'write to file at the same time 
    WScript.Sleep 100 
Loop 


objOutFile.Close 

Solution:

Set objShell = CreateObject("WScript.Shell") 

Set objFS = CreateObject("Scripting.FileSystemObject") 

strOutput = "c:\svn_backup\fullbackupa" 

Set objOutFile = objFS.CreateTextFile(strOutput,True) 


Set objShellExec = objShell.Exec("%comspec% /c " & "svnadmin dump C:\svn_repos > c:\svn_backup\fullbackupb") 

Do While objShellExec.Status = 0 
    stdoutline=objShellExec.StdErr.Readline 
    Wscript.Echo stdoutline 'echo to standard output 
    'Wscript.Echo objShellExec.StdErr.Readline 
    objOutFile.WriteLine(stdoutline & vbCrLf) 'write to file at the same time 
    WScript.Sleep 100 
Loop 


objOutFile.Close 

Répondre

0

vous ne pouvez pas lire l'état parce que vous redirigez tous vos stdout à c:\fullbackup. Vous devriez ouvrir le fichier c:\fullbackup et lire le contenu à la place.

Mise à jour: vous pouvez écrire votre état à un fichier de sortie, quelque chose comme ça

Set objFS = CreateObject("Scripting.FileSystemObject") 
strOutput = "c:\fullbackup" 
Set objOutFile = objFS.CreateTextFile(strOutput,True) 
... 
Do While objWshScriptExec.Status = 0 
    stdoutline=objShellExec.StdOut.Readline 
    Wscript.Echo stdoutline 'echo to standard output 
    'Wscript.Echo objShellExec.StdErr.Readline 
    objOutFile.WriteLine(stdoutline & vbCrLf) 'write to file at the same time 
    WScript.Sleep 100 
Loop 
.... 
objOutFile.Close 
+0

Merci pour la réponse. Si je courais "svnadmin dump" directement à partir de la ligne de commande, je verrais: * Dumped révision 100. * Dumped révision 101. * Dumped révision 102 ... etc Comment puis-je capturer ces informations de sortie alors? Ces informations ne sont évidemment pas envoyées à stdout car c: \ fullbackup ne contient jamais les informations ci-dessus. – Dexton

+0

vous pouvez supprimer la redirection de sortie vers 'c: \ fullbackup' et utiliser simplement la boucle' do while' que vous avez. – ghostdog74

+0

Exécution de "svnadmin dump C: \ svn_repos C: \ fullbackup" sans redirection de sortie à partir de la ligne de commande, un hôte de données de vidage qui est généralement stocké dans le fichier de vidage apparaîtra à l'écran. Si j'exécutais la commande "svnadmin dump C: \ svn_repos> C: \ fullbackup" à partir de la ligne de commande, un fichier de vidage serait créé mais apparaître à l'écran serait verbeux (je pense) information (ie * Dumped révision 100. * Révision Dumped 101. etc). Comment puis-je capter cette information "verbeuse" et avoir un fichier de vidage? – Dexton