Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Ersten 32 bytes mehrerer binär-dateien mit batch oder vbs löschen

Mitglied: BuRnInGfIrE

BuRnInGfIrE (Level 1) - Jetzt verbinden

23.04.2010, aktualisiert 18.10.2012, 7261 Aufrufe, 21 Kommentare

Ersten 32 bytes mehrerer binär-dateien mit batch oder vbs löschen...

Hallo,
ich möchte aus mehreren binär Dateien, die in einem ordner sind, die ersten 32 Bytes löschen (Dateiheader entfernen) und das resultat im unterordner "Conv" in einer neuen datei mit neuer dateiendung (.dds) speichern.
Die orginal dateierweiterung ist ".xbt".
Die dateinamen sollen erhalten bleiben (bis eben auf die dateiendung).

Danke.

MfG BuRnInGfIrE
Mitglied: bastla
24.04.2010, aktualisiert 18.10.2012
Hallo BuRnInGfIrE und willkommen im Forum!

Obwohl VBS nicht (und Batch schon überhaupt nicht) zur Verarbeitung von Binärdateien gedacht ist, sollte sich das Entfernen des Headers auf Basis einer hier von didi1954 gezeigten Methode etwa so lösen lassen:
01.
SourcePath = "D:\Test"
02.
SourceExt = "xbt"
03.
Skip = 32
04.
TargetPath = "D:\Test\Convert"
05.
TargetExt = "dds"
06.

07.
Set Fso = CreateObject("Scripting.FileSystemObject")
08.
If Not Fso.FolderExists(TargetPath) Then Fso.CreateFolder(TargetPath)
09.

10.
For Each File In Fso.GetFolder(SourcePath).Files
11.
    If LCase(Fso.GetExtensionName(File.Name)) = SourceExt Then
12.
        Set BinFile = File.OpenAsTextStream
13.
        i = 1
14.
        BinText = ""
15.
        Do Until BinFile.AtEndOfStream
16.
            c = BinFile.Read(1)
17.
            If i > Skip Then BinText = BinText & c
18.
            i = i + 1
19.
        Loop
20.
        BinFile.Close
21.
    
22.
        Set BinFile = Fso.CreateTextFile(TargetPath & "\" & Fso.GetBaseName(File.Name) & "." & TargetExt)
23.
        For i = 1 To Len(BinText)
24.
             BinFile.Write Mid(BinText, i, 1)
25.
        Next
26.
        BinFile.Close        
27.
    End If
28.
Next
29.
MsgBox "Done."
Falls der Zielordner noch nicht existiert, wird dieser erstellt.
Im Zielordner ev bereits vorhandene gleichnamige Dateien werden ohne Rückfrage überschrieben.

Grüße
bastla
Bitte warten ..
Mitglied: BuRnInGfIrE
24.04.2010 um 00:34 Uhr
WOW!!!

Das ging ja fix, Lob.

Dieser VBS-skript funktioniert bestens, Danke.

MfG BuRnInGfIrE
Bitte warten ..
Mitglied: bastla
24.04.2010 um 00:40 Uhr
Hallo BuRnInGfIrE!

Freut mich, wenn's passt.

Das Lob steht aber auf jeden Fall didi1954 zu ...

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
24.04.2010 um 01:49 Uhr
Hallo bastla,
Zitat von bastla:
Obwohl VBS nicht (und Batch schon überhaupt nicht) zur Verarbeitung von Binärdateien gedacht ist,
Es gibt aber durchaus Techniken zum Umgehen dieser VBS-Beschränkung.

Rest des Beitrags wegen Problemen und zu später Uhrzeit zurückgezogen .

Gute Nacht
LotPings
Bitte warten ..
Mitglied: bastla
24.04.2010 um 09:09 Uhr
Hallo LotPings!

Die auf der von Dir verlinkten Seite Work with binary files in VBSscript - read and write local and remote files beschriebenen Techniken waren alle schon da, als ich etwa 2006 zum letzten Mal intensiver nach entsprechenden Möglichkeiten gesucht habe - aber es sind, wie Du richtig schreibst, eben nur Ansätze zum "Umgehen dieser VBS-Beschränkung". Ob sich daraus (oder aus einem der 2, 3 weiteren Vorschläge, die ich damals gefunden und mittlerweile schon [Edit] fast: Eric Lippert: Binary Files and the File System Object Do Not Mix [/Edit] wieder verdrängt habe ) - vermutlich - etwas Perfomanteres basteln lässt, wäre zu testen (wobei wir aber noch nicht einmal wissen, wie groß die zu konvertierenden "xbt"-Dateien sind bzw ob dringender Optimierungsbedarf besteht) ...

Grüße
bastla
Bitte warten ..
Mitglied: BuRnInGfIrE
24.04.2010 um 10:19 Uhr
@bastla:

Die xbt Dateien sind zwichen 2 und ~256 kb gross.

Und das entfernen der ersten 32 byte ist in der Tat seeeehhhhr langsam, aber es geht.
Bitte warten ..
Mitglied: LotPings
24.04.2010 um 10:28 Uhr
Ja du hast ja Recht,
ich habe mir da gestern lange die Zähne dran ausgebissen und dachte das es per Ein-/Ausgabeumleitung funktionieren würde. Das tat es mit Testdaten mit allen möglichen Bytes auch, aber weitere Tests mit größeren Dateilängen ergaben dann ein inakzeptables "funktioniert nur manchmal".

Defekte Lösung gelöscht.

Gruß
LotPings
Bitte warten ..
Mitglied: BuRnInGfIrE
24.04.2010 um 11:10 Uhr
Die oben gezeigte Stapelverarbeitung geht nicht so richtig.
Die ersten 32 byte scheinen zwar entfernt zu werden aber die ausgabedatei ist nicht mehr zu gebrauchen?!
bisher ist der VB-skript die beste lösung.

Zu den VB-Skript:

Gibt es eine möglichkeit sowas wie ein fortschrittsbalken oder so änlich, was zeigt wie weit er ist, anzuzeigen?

Danke.
Bitte warten ..
Mitglied: LotPings
24.04.2010 um 12:19 Uhr
Zitat von BuRnInGfIrE:
Gibt es eine möglichkeit sowas wie ein fortschrittsbalken oder so änlich, was zeigt wie weit er ist, anzuzeigen?
Es gibt dafür zwar auch Techniken, aber eine Beschleunigung hilft dir vielleicht eher weiter.
Wenn du dieses Variante mit Cscript ausführst, wird die aktuelle Datei angezeigt.
Durch das direkte Schreiben der eingelesenen Bytes sollte es etwas schneller sein als die Version die die ganze Datei einliest und dann erst schreibt.

01.
ForceCscript ' Diese Zeile NICHT weglassen, sonst wird die Subroutine ForceCscript nicht aufgerufen ;-)
02.
SourcePath = "D:\Test"
03.
SourceExt = "xbt"
04.
Skip = 32
05.
TargetPath = "D:\Test\Convert"
06.
TargetExt = "dds"
07.

08.
Set Fso = CreateObject("Scripting.FileSystemObject")
09.
If Not Fso.FolderExists(TargetPath) Then Fso.CreateFolder(TargetPath)
10.

11.
For Each File In Fso.GetFolder(SourcePath).Files
12.
    If LCase(Fso.GetExtensionName(File.Name)) = SourceExt Then
13.
        Set BinFileIn = File.OpenAsTextStream
14.
        Set BinFileOut = Fso.CreateTextFile(TargetPath & "\" & Fso.GetBaseName(File.Name) & "." & TargetExt)
15.
	wscript.echo "Verarbeite: " & File
16.
        i = 1
17.
        Do Until BinFileIn.AtEndOfStream
18.
            c = BinFileIn.Read(1)
19.
            If i > Skip Then BinFileOut.Write c
20.
            i = i + 1
21.
        Loop
22.
        BinFileIn.Close
23.
        BinFileOut.Close        
24.
    End If
25.
Next
26.
Wscript.Echo "Fertig, zum Fortfahren Enter drücken."
27.
WScript.StdIn.ReadLine()
28.

29.
Sub ForceCscript
30.
  If (right(Ucase(WScript.FullName),11)="WSCRIPT.EXE") Then
31.
    Dim WshShell,args,objArgs,I
32.
    Set WshShell = CreateObject("WScript.Shell")
33.
    WshShell.Run WshShell.ExpandEnvironmentStrings("%COMSPEC%") & _
34.
    " /C cscript.exe """ & Wscript.ScriptFullName & """" ,1,False
35.
    Set WshShell = Nothing
36.
   WScript.Quit
37.
  End If
38.
End Sub
Gruß
LotPings

Edit: ForceCscript und Wscript.Echo eingebaut
Bitte warten ..
Mitglied: BuRnInGfIrE
24.04.2010 um 12:40 Uhr
Cool, Danke sehr.

Die nzeige der gerade zu verarbeitenden Datei ist auch ne lösung.
Mann darf den Skript bloß nicht direkt starten, da mann sich sonst tot "OK" klickt.
Ich verwende deshalt eine Start-CMD datei.

Die verarbeitungsgeschwindigkeit ist nun auch akzeptapel.

Eine frage noch:

Wie bekommt mann die "Done" meldung nach abschluss der Dateioperationen auch in das CMD-Fenster.
Ich würde dann am ende der CMD-Datei noch mit "PAUSE" unterbrechen.

MfG BuRnInGfIrE
Bitte warten ..
Mitglied: LotPings
24.04.2010 um 13:08 Uhr
Hallo,
habe beide Anforderungen direkt eingebaut,
das script prüft ob es mit wscript gestartet wurde und wenn ja startet es sich selbst nochmal mit cscript;
also keine Batch zum Starten mehr nötig.

Gruß
LotPings
Bitte warten ..
Mitglied: 76109
24.04.2010 um 13:09 Uhr
Hallo zusammen!

Anhand von bastlas Quellcode und LotPings gepostetem Link, habe ich die Funktion mal an die Bedürfnisse von BuRnInGfIrE angepasst und der ganze Ablauf sollte um ein vielfaches schneller von statten gehen.

01.
Const SourcePath = "D:\Test"
02.
Const SourceExt = "xbt"
03.
Const TargetPath = "D:\Test\Convert"
04.
Const TargetExt = "dds"
05.

06.
Const Skip = 32
07.
Const adTypeBinary = 1
08.
Const adSaveCreateOverWrite = 2
09.

10.
Dim Fso, File, BinaryStream, ByteArray, NewFile
11.

12.
Set Fso = CreateObject("Scripting.FileSystemObject")
13.
Set BinaryStream = CreateObject("ADODB.Stream")
14.

15.
If Not Fso.FolderExists(TargetPath) Then Fso.CreateFolder (TargetPath)
16.

17.
For Each File In Fso.GetFolder(SourcePath).Files
18.
    If LCase(Fso.GetExtensionName(File.Name)) = SourceExt Then
19.

20.
        WScript.Echo "Verarbeite: " & File 
21.
        
22.
        With BinaryStream
23.
            .Type = adTypeBinary
24.
            .Open
25.
            .LoadFromFile File.Path
26.
            .Position = Skip
27.
             ByteArray = .Read(.Size - Skip)
28.
            .Close
29.
        End With
30.
    
31.
        NewFile = TargetPath & "\" & Fso.GetBaseName(File.Name) & "." & TargetExt
32.
        
33.
        With BinaryStream
34.
            .Type = adTypeBinary
35.
            .Open
36.
            .Write ByteArray
37.
            .SaveToFile NewFile, adSaveCreateOverWrite
38.
            .Close
39.
        End With
40.
    End If
41.
Next
42.

43.
WScript.Echo "Done."
@bastla
Danke für Verwendung meines Codeschnipsels und die Lobesweiterreichung

Gruß Dieter

PS. Und eigentlich habe ich wegen Umzugsvorbereitungen überhaupt keine Zeit
Bitte warten ..
Mitglied: LotPings
24.04.2010 um 13:23 Uhr
Hallo Dieter,

sieht gut aus, kann es leider nicht testen weil mein Avira da ein
"HTML/ADODB.Exploit.Gen"
fehlerkennt.

Gruß
LotPings
Bitte warten ..
Mitglied: 76109
24.04.2010 um 13:31 Uhr
Hallo LotPings!

Ich nutze das Antivirus aus der gelben Schachtel und der gibt mir keine derartige Meldung?

Gruß Dieter
Bitte warten ..
Mitglied: BuRnInGfIrE
24.04.2010 um 13:48 Uhr
Bei mir startet (wenn ich es ohne CMD-datei starte) mit WScript und nicht mit CSkript.
Er zeigt bei mir auch immer alle dateien in einem Windows-OK Fenster an.?
Wenn es hilft, ich verwende eine X64-Windows umgebung mit Server 2k3.

@76109:

WOW nun rennt das teil ja so richtig mit lichtgeschwindigkeit .
Super Arbeit - Lob.

Nun wäre ich noch an einer kombi der beiden Skripte interressiert.
Das skript von LotPings mit der "CSkript.exe" abfrage kombiniert mit der geschwindigkeit vom Skript von didi1954.

Danke.
Bitte warten ..
Mitglied: LotPings
24.04.2010 um 14:13 Uhr
Zitat von BuRnInGfIrE:
Bei mir startet (wenn ich es ohne CMD-datei starte) mit WScript und nicht mit CSkript.
Er zeigt bei mir auch immer alle dateien in einem Windows-OK Fenster an.?
Wenn es hilft, ich verwende eine X64-Windows umgebung mit Server 2k3.
Habe das hier unter Win7-64bit geschrieben und auch auf XP-ProSP3 getestet - seltsam.

@didi1954:
WOW nun rennt das teil ja so richtig mit lichtgeschwindigkeit .
Super Arbeit - Lob.

Schließe mich da an, auf meinem XP-Rechner läufts (auch mit Avira aber ohne Fehlalarm)

Dann weiterhin erfolgreiche Umzugsvorereitungen.

Gruß
LotPings
Bitte warten ..
Mitglied: Biber
24.04.2010 um 15:51 Uhr
Moin alle,

wenn denn VBScript auf diesem Rechner von diesem Benutzer nur für diese eine Aufgabe benutzt wird (zumindest die nächsten paar halben Stunden...
> cscript //H:cscript //nologo /s
Befehlszeilenoptionen wurden gespeichert.
Der standardmäßige Skripthost ist jetzt "cscript.exe".
...einmalig vom CMD-Prompt eingeben.
Siehe Hilfe zu CScript /?

Grüße
Biber

P.S. @76109 Du machst jetzt bitte dein ungeliebtes Umzugsgeraffel.
Weitere Kommentare von dir an diesem Wochenende werde ich löschen
Bitte warten ..
Mitglied: bastla
24.04.2010 um 17:19 Uhr
Hallo @All!

Da wart Ihr ja fleißig - Dieter jedenfalls hat meinen (für ungefähr jetzt geplanten) nächsten Versuch (erfolgreich) vorweg- und damit offensichtlich eine Doppelbelastung auf sich genommen.
LotPings "ForceCscript" tut auch bei mir (allerdings bisher nur unter XP SP3 getestet) was es soll (und wäre daher einfach in Dieters Script am Anfang und Ende hinzuzufügen) ...

Grüße
bastla

P.S.: @Biber
Weitere Kommentare von dir an diesem Wochenende werde ich löschen
Per "move"-Befehl?
Bitte warten ..
Mitglied: BuRnInGfIrE
24.04.2010 um 17:38 Uhr
Ach herje, was bin ich blind!

Du hast ja recht, basta.
Ich habe doch total übersehen dass Zeile 1 ja auch anders ist, lol.

Nun ist der skript perfekt.

Danke euch allen.

MfG BuRnInGfIrE
Bitte warten ..
Mitglied: bastla
24.04.2010 um 18:10 Uhr
Hallo BuRnInGfIrE!
Ich habe doch total übersehen dass Zeile 1 ja auch anders ist, lol.
Kein Wunder - gibt's doch schon wieder keine Kommentare in den Scripts ...

... was aber zum Glück den erfolgreichen Abschluss dieses Threads nur ein wenig verzögert hat.

Grüße
bastla
Bitte warten ..
Mitglied: 76109
25.04.2010 um 20:20 Uhr
Hallooo erstmal!

@LotPings
Dann weiterhin erfolgreiche Umzugsvorereitungen.
Yep, danke. Das schlimmste habe ich geschafft (in alter Wohnung) und bin gut im Zeitplan

@Biber
P.S. @76109 Du machst jetzt bitte dein ungeliebtes Umzugsgeraffel.
Weitere Kommentare von dir an diesem Wochenende werde ich löschen
Habe schon die ganze Woche schwer geschuftet und habe mir am Samstag mal ne längere Kaffeepause gegönnt und bei dieser Gelegenheit das Skript gebastelt. War ne angenehme Abwechslung und hat meine Motivation wieder etwas gestärkt

@bastla
Da wart Ihr ja fleißig - Dieter jedenfalls hat meinen (für ungefähr jetzt geplanten) nächsten Versuch (erfolgreich) vorweg- und
damit offensichtlich eine Doppelbelastung auf sich genommen.
Sorry, wenn ich Deine Pläne etwas durcheinander gebracht habe

@ BuRnInGfIrE
WOW nun rennt das teil ja so richtig mit lichtgeschwindigkeit .
Super Arbeit - Lob.
Doch so schnell Die Geschwindigkeit hatte ich aus Zeitgründen nicht getestet und habe nur mal angenommen, dass es um einiges schneller laufen müsste.

Ansonsten, hat dieser Thread Spaß gemacht

Und nun, muss ich wieder weiter schuften

Gruß Dieter
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Batch erst starten wenn bestimmte Datei vorhanden ist

gelöst Frage von pdiddoBatch & Shell7 Kommentare

Hi Jung, in meiner batch wird eine .txt Datei bearbeitet. Diese .txt ist aber nur bei einer bestimmten Ereignisauslösung ...

VB for Applications

VBS Datei Auswahl Dialog

gelöst Frage von 133202VB for Applications5 Kommentare

Hallo Ihr, im Thread: konnte ich schon finden, was ich gesucht habe: Jetzt möchte ich allerdings, dass am Anfang ...

VB for Applications

VBS für Timestamp-Datei

gelöst Frage von PascalSchVB for Applications3 Kommentare

Hallo Zusammen, Bin ziemlich neu in der Welt des VBS und habe eine Frage hierzu, die ihr mir hoffentlich ...

Batch & Shell

Base64 Decode (Batch,VBS)

gelöst Frage von clragonBatch & Shell26 Kommentare

Hey Leute Ich suche gerade nach einem kleinen VBS schnipsel für mein aktuelles Batch Projekt. Das Schnipsel soll in ...

Neue Wissensbeiträge
Rechtliche Fragen
Unitymedia siegt vor dem BGH
Information von transocean vor 6 StundenRechtliche Fragen3 Kommentare

Moin, lt. einem aktuellen Urteil darf UM Mietrouter seiner Kunden weiterhin in Hotspots verwandeln. Nachlesen kann man das hier. ...

Router & Routing
Der "768k-Day" kommt
Information von LordGurke vor 1 TagRouter & Routing2 Kommentare

Für Leute, die Router mit BGP-Fulltable betreiben vielleicht ein interessanter Hinweis: Die IPv4-Fulltable erreicht voraussichtlich innerhalb der nächsten 2-3 ...

Debian

Partition angeblich voll, dabei aber noch nicht mal zur Hälfte belegt

Anleitung von diemilz vor 1 TagDebian8 Kommentare

Hallo zusammen, ich habe ein kleines Problem: Ich habe auf einem physischen Debian Linux Server als ZoneMinder-Server (HP ProLiant ...

Windows 7
Updategängelung auf Windows 10, die zweite
Information von Penny.Cilin vor 6 TagenWindows 73 Kommentare

Hallo, da Windows 7 im kommenden Jahr nicht mehr supportet wird, werden Nutzer von Window 7 home premium wieder ...

Heiß diskutierte Inhalte
HTML
Bild hochladen mit html auf die Webseite
gelöst Frage von WorldoftheitHTML63 Kommentare

Will eine Seite entwickeln im Internet aber Das Bild wird nicht angezeigt woran kann das liegen? Wäre für jede ...

Vmware
Terminalserver VM - Videos ruckeln
Frage von easyriderVmware29 Kommentare

Hallo zusammen, wir haben einen (free) ESXi 5.5 auf einem HP DL 380 G8 im Einsatz. Darauf läuft, unter ...

Festplatten, SSD, Raid
Harddisk kaputt, was sagt mir ChrystalDiskInfo
gelöst Frage von InfoSeekerFestplatten, SSD, Raid23 Kommentare

Hallo zusammen, Mein Rechner lahmt. Ich stell mir die Frage woran es liegt und bin der Meinung es ist ...

Backup
Veeam Community Edition
gelöst Frage von dgrebnerBackup23 Kommentare

Hallo Zusammen, kann jemand seine praktischen Erfahrungswerte mit der Veeam-Community Edition mit mir teilen? Es gab dazu ja schon ...