Datei verschieben, solange probieren bis erfolgreich
Hallo zusammen,
ich möchte einen eigentlich schon in BATCH programmierten Prozess optimieren, und von dem, was ich von VBS weiss, wäre das ein geeigneter Weg.
Nun ist es aber so, dass ich nicht ohne Grund in BATCH programmiert habe - VBS kann ich nämlich nicht.
Um Folgendes geht es:
Automatisiert wird ein Encodiervorgang gestartet (Video wird zu Flash umgewandelt). Da ich leider keine Möglichkeit habe, dem Encodierprogramm einen "Do After"-Befehl zu geben, muss ich anders feststellen, wann die Datei fertig encodiert ist.
Meine Vorgehensweise ist die: Ich starte den Encodiervorgang um 18:00 automatisch. Er dauert geschätzt 20min. Also führe ich um 18:18 eine BATCH aus, die versucht die Datei zu verschieben. Wenn das nicht möglich ist wird noch encodiert (if errorlevel 1 goto RETRY). Bei :RETRY wird 10Sekunden gewartet und der Move-Befehl erneut ausgeführt, solange bis erfolgreich, daanch werden weitere Befehle ausgeführt, die aber hier nichts zur Sache tun.
Der Punkt ist jetzt, dass diese WAIT-Aktion per Batch die CPU dermaßen auslastet, dass alles andere sehr langsam wird, deswegen würde ich es gerne über VBS mit sleep lösen.
Ich habe mir schon VBS-Happen aus dem Netz zusammengesucht, die vermutlich das machen, was ich möchte, und wäre jetzt sehr dankbar, wenn mir das jmd. flux zusammenbaut.
Die Datei heisst immer ENCODE.flv und liegt z.B. auf "C:\ENCODE" und soll nach "C:\ENCODED"
Hier habe ich was gefunden, was alle Dateien aus dem einen in den anderen Ordner verschiebt, ich brauchs aber ja nur für genau eine Datei, deren Namen ich schon weiss; ausserdem soll er es ja bei einem Fehler solange probieren, bis es klappt:
Wenn ein Fehler beim Verschieben der einen Datei auftritt, soll das passieren:
Wenn die Datei erfolgreich verschoben wurde soll noch eine Batch ausgeführt werden und die VBS beendet werden.
Ich danke euch bereits jetzt im Vorraus! Ich würde es selbst machen, aber ich weiss nicht wie die Errorlevel-Funktion bzw. goto :Marker bei VBS funktioniert.
ich möchte einen eigentlich schon in BATCH programmierten Prozess optimieren, und von dem, was ich von VBS weiss, wäre das ein geeigneter Weg.
Nun ist es aber so, dass ich nicht ohne Grund in BATCH programmiert habe - VBS kann ich nämlich nicht.
Um Folgendes geht es:
Automatisiert wird ein Encodiervorgang gestartet (Video wird zu Flash umgewandelt). Da ich leider keine Möglichkeit habe, dem Encodierprogramm einen "Do After"-Befehl zu geben, muss ich anders feststellen, wann die Datei fertig encodiert ist.
Meine Vorgehensweise ist die: Ich starte den Encodiervorgang um 18:00 automatisch. Er dauert geschätzt 20min. Also führe ich um 18:18 eine BATCH aus, die versucht die Datei zu verschieben. Wenn das nicht möglich ist wird noch encodiert (if errorlevel 1 goto RETRY). Bei :RETRY wird 10Sekunden gewartet und der Move-Befehl erneut ausgeführt, solange bis erfolgreich, daanch werden weitere Befehle ausgeführt, die aber hier nichts zur Sache tun.
Der Punkt ist jetzt, dass diese WAIT-Aktion per Batch die CPU dermaßen auslastet, dass alles andere sehr langsam wird, deswegen würde ich es gerne über VBS mit sleep lösen.
Ich habe mir schon VBS-Happen aus dem Netz zusammengesucht, die vermutlich das machen, was ich möchte, und wäre jetzt sehr dankbar, wenn mir das jmd. flux zusammenbaut.
Die Datei heisst immer ENCODE.flv und liegt z.B. auf "C:\ENCODE" und soll nach "C:\ENCODED"
Hier habe ich was gefunden, was alle Dateien aus dem einen in den anderen Ordner verschiebt, ich brauchs aber ja nur für genau eine Datei, deren Namen ich schon weiss; ausserdem soll er es ja bei einem Fehler solange probieren, bis es klappt:
'*******************************************************
' WSH - VBSkript: move_file.vbs
' - verschiebt Dateien von einem festgelegten Quell-
' in einen festgelegten Zielordner
' - falls im Zielordner eine Datei vorhanden ist wird
' diese nicht verschoben
'*******************************************************
Option Explicit
Dim fso, oFile, oFiles, oFolder
Dim sQuelle, sZiel, sMsg
On Error Resume Next
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFolder = fso.GetFolder("C:\bilder")
Set oFiles = oFolder.Files
sZiel = "C:\sammlung\"
For Each oFile In oFiles
sQuelle = fso.GetAbsolutePathName(oFile)
fso.MoveFile sQuelle, sZiel
If Err.Number <> 0 Then
sMsg = Err.Description
Select Case Err.Number
Case 58
sMsg = sMsg & vbCrlf & vbCrlf & sQuelle
Case 76
sMsg = sMsg & vbCrlf & vbCrlf & sZiel
Case Else
sMsg = sMsg
End Select
MsgBox sMsg, 48, "Fehler!"
Err.Clear
End If
Next
MsgBox "Ende", 64, "Info"
Wenn ein Fehler beim Verschieben der einen Datei auftritt, soll das passieren:
WScript.Sleep 10 * 1000
Loop
Wenn die Datei erfolgreich verschoben wurde soll noch eine Batch ausgeführt werden und die VBS beendet werden.
Ich danke euch bereits jetzt im Vorraus! Ich würde es selbst machen, aber ich weiss nicht wie die Errorlevel-Funktion bzw. goto :Marker bei VBS funktioniert.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 104318
Url: https://administrator.de/forum/datei-verschieben-solange-probieren-bis-erfolgreich-104318.html
Ausgedruckt am: 23.12.2024 um 04:12 Uhr
3 Kommentare
Neuester Kommentar
Servus,
Kannst du das "Do After nicht aus dem Script heraus erzeugen, das den Encodiervorgang antreibt?
Gruß
Um Folgendes geht es:
Automatisiert wird ein Encodiervorgang gestartet (Video wird zu Flash umgewandelt).
Da ich leider keine Möglichkeit habe, dem Encodierprogramm einen
"Do After"-Befehl zu geben, muss ich anders feststellen, wann die Datei fertig encodiert ist.
Automatisiert wird ein Encodiervorgang gestartet (Video wird zu Flash umgewandelt).
Da ich leider keine Möglichkeit habe, dem Encodierprogramm einen
"Do After"-Befehl zu geben, muss ich anders feststellen, wann die Datei fertig encodiert ist.
- Jein
Kannst du das "Do After nicht aus dem Script heraus erzeugen, das den Encodiervorgang antreibt?
start /wait encode 123.mpg 123.swf
move 123.swf ziel\123.swf
Gruß
Moin,
interessant wäre auch, was du als WAIT-Funktion verwendest. Ich kenne das von IBM-Notebooks z.B. so, dass die eine IBMwait.exe oder so mit einem Zeit-Wert in Sekunden ansteuern.
Ich verwende meist statt wait einen wenn ich z.B. 30 Sekunden Wartezeit erzeugen möchte. Mir ist dabei noch nicht aufgefallen, dass ein Ping die CPU übermäßig auslasten würde.
MfG,
VW
interessant wäre auch, was du als WAIT-Funktion verwendest. Ich kenne das von IBM-Notebooks z.B. so, dass die eine IBMwait.exe oder so mit einem Zeit-Wert in Sekunden ansteuern.
Ich verwende meist statt wait einen
ping 127.0.0.1 -n 30
MfG,
VW