vodkanier
Goto Top

Batch per VBS schreiben und ausführen

Hallo,
ich versuche momentan ein VBS script zu schreiben, das Dateiveränderungen überwacht. Hierfür nutze ich rehash (rehash.sourceforge.net) zum Berechnen von Hashwerten. Leider schaffe ich es nicht das Tool mit Hilfe von VBS korrekt aufzurufen. Deswegen lasse ich VBS eine batch-Datei schreiben die auch korrekt erstellt wird. Eigenartigerweise taucht beim Ausführen der batch dann aber ein "1>", obwohl es in der Batch nicht steht.

Ich hänge den VBS Teil an:
OPTION EXPLICIT

dim objFSO                  ' Filesystemobject  
dim FCIV                    ' FCIV Anweisung   
dim Folder                  ' zu scannendes Verzeichnis  
folder = "C:\Download"  
dim Output 
Output = "C:\Output"  

dim objFile

dim datum                   ' Zeit und Datum um Logs zu benennen  
datum=date()
dim zeit
zeit=time()
zeit = Replace(zeit,":","")   ': entfernen aus Uhrzeit  
datum = Replace(datum,".","") '. entfernen aus Datum  

Const ForWriting = 2 				' Konstante zum Schreiben in Dateien, bestehender Inhalt wird gelöscht  
Const ForAppending = 8 				' Konstante zum Hinzufügen von Datensätzen  

dim objshell

Set objShell = WScript.CreateObject("WScript.Shell")   


Set objFSO = CreateObject("Scripting.FileSystemObject")								' (Datei) Zugriffsobjekt erstellen  





' Pfad der überprüft werden soll  
if objFSO.FolderExists(Folder) = false then wscript.echo "Der Ordner, der geprüft werden soll, existiert nicht!"  
	 
' Pfad für Ergebnisse: Output  
if objFSO.FolderExists(output) = false then
	objFSO.CreateFolder(output) 
	else
	wscript.echo "Ordner existiert schon: " & output  
end if

' Batchgenerator  
FCIV = "rehash.exe -r -none -ed2k -sha1 -md5 -out:txt " & folder & "\*.* " & chr(62) & " " & output & "\" & datum & "_" & zeit & "_FCIV.log"   
wscript.echo FCIV
set objFile = objFSO.OpenTextFile("rehash.bat", ForWriting, true)  
objFile.Write(FCIV)
objFile.Close

objshell.run "rehash.bat",,True  

Noch ein Beispiel für das 1> Problem, aus der CMD kopiert:
"rehash.exe -r -none -ed2k -sha1 -md5 -out:txt C:\Download\*.* 1>C:\Output\04082008_165541_FCIV.log"

Ich wäre für Hilfe sehr dankbar.

Gruß Vodkanier

PS: Ursprünglich habe ich das MS Tool FCIV verwendet, deswegen auch die Variable.

Content-ID: 93571

Url: https://administrator.de/contentid/93571

Ausgedruckt am: 08.11.2024 um 20:11 Uhr

xmicha
xmicha 04.08.2008 um 17:20:24 Uhr
Goto Top
Hallo =)
Ich bin auch grade dabei ein Programm mittels VB zu schreiben.

Ich habe gelesen das du mein Problem gelöst hasst und wär froh wenn du mir mal helfen würdest.

Mein Problem:
Ich habe in einem Formular zwei CheckBoxen eingeführt und ein Button.

Sobald ich eine der jeweiligen CheckBoxen anklicke soll eine Batch geschrieben werden mit inhalt

 
@echo off
start C:/lol.exe

und wenn man dann anschließend auf den Button klickt soll die Batch gestartet werden.

Da ich noch anfänger bin wär ich froh wenn du mir helfen würdest aber bitte ausfühliche antworten
danke im voraus
bastla
bastla 04.08.2008 um 18:40:45 Uhr
Goto Top
Hallo Vodkanianer!

Was genau ist das Problem dabei?

Die eingefügte "1" vor dem ">" zeigt nur an, dass STDOUT umgeleitet wird - an der Funktionalität ändert das aber nichts ...

Nachvollziehen kannst Du das ganz einfach, indem Du eine Batchdatei
dir c:\Output >nul
pause
erstellst und ausführst ...

Da eine Umleitung in Batch defaultmäßig für den angesprochenen Kanal 1 (STDOUT) gilt, wird üblicherweise in Batch nur das Umleitungszeichen (">" oder ">>") geschrieben; anders ist dies bei der Umleitung der Fehlermeldungen von STDERR - dafür ist dann "2>" zu verwenden.

Grüße
bastla
Vodkanier
Vodkanier 05.08.2008 um 07:22:14 Uhr
Goto Top
Das Problem ist, das wenn ich nun die Batch aufrufe
Set oShell = WScript.CreateObject("WScript.Shell")   
oShell.Run "C:\rehash\rehash.bat",,true  

erhalte ich nur 0KB Logs, mit denen ich dann verständlicherweise nicht weiterarbeiten kann. Auch der Versuch, es über eine seperate Launcher-.bat ausführen mithilfe von "Call" (damit VBS erst weiterläuft, nach dem die batch durchgelaufen ist), schlug fehl.
Vodkanier
Vodkanier 05.08.2008 um 07:53:23 Uhr
Goto Top
@xmicha

Also in VBS sähe es wie folgt aus(ungetestet), wobei ich nie wirklich Buttons/Checkboxen verwende.


Const ForWriting = 2 				' Konstante zum Schreiben in Dateien, bestehender Inhalt wird gelöscht  

' Erstellen der Batchdatei  
set objFile = objFSO.OpenTextFile("lol.bat", ForWriting, true)  
objFile.Write("@echo off" & vbcrlf & "start C:/lol.exe")  
objFile.Close

'Ausführen der Batch  
Set objShell = WScript.CreateObject("WScript.Shell")  
objShell.Run "lol.bat", , True               ' Batch ausführen, VBS wartet bis Batch abgearbeitet ist  

Wie du das ganze an deine Checkboxen/Buttons koppelts, kann ich dir aber leider (noch) nicht sagen =)
Aber vielleicht hilft dir das schon weiter.
bastla
bastla 05.08.2008 um 10:16:02 Uhr
Goto Top
Hallo Vodkanianer!

Versuch es damit, den vollen Pfad zur "rehash.exe" anzugeben bzw diese in einem der in %PATH% enthaltenen Verzeichnisse (etwa %WINDIR% oder %WINDIR%\System32) abzulegen - ansonsten funktioniert das Script bei mir klaglos.

Grüße
bastla
aFankhauser
aFankhauser 17.05.2009 um 13:06:30 Uhr
Goto Top
@ xmicha

kenne zwar VB nicht aber dafür hta. vielleicht kann dir das weiterhelfen:

in hta sieht eine checkbox wie folgt aus:
<input type="checkbox" id="haken" onclick="rRoutine">  

und das script dazu: (Vb-SCRIPT ist zwar ähnich wie VB. aber nicht das selbe du müsstest es daher noch anpassen)
sub rRoutine
 outputFile = "Dateiname.bat"  
 set fso = CreateObject("scripting.FileSystemObject")  

 set datei = fso.opentextfile(outputFile, 2, 1)
 datei.write "echo erste Zeile" & vbCrLf  
 datei.write "echo zweite zeile" & vbCrLf  
 datei.write "pause"  
 datei.close
end sub