mistax
Goto Top

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:

'*******************************************************  
' 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.

Content-ID: 104318

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

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

60730
60730 17.12.2008 um 17:48:52 Uhr
Goto Top
Servus,

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.

  • 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ß
36831
36831 17.12.2008 um 18:17:42 Uhr
Goto Top
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
ping 127.0.0.1 -n 30
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
MISTAX
MISTAX 19.12.2008 um 13:46:07 Uhr
Goto Top
@Timo, das Encoding-Programm wird per aufgezeichneter Mausgesten gestartet, da es sich anders überhaupt nicht automatisieren lässt.

@36831 das mit dem Ping könnte ich wirklich probieren... Ich verwende eine vor Urzeiten im Netz gefundene wait.exe die ich per "wait %zeit%" ansteuern kann.