Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Frage Entwicklung Batch & Shell

Mitglied: BuRnInGfIrE

BuRnInGfIrE (Level 1) - Jetzt verbinden

23.04.2010, aktualisiert 18.10.2012, 7039 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Entwicklung
gelöst Mit Batch,VBS,Powershell Windows einrichten (1)

Frage von Justin98 zum Thema Entwicklung ...

Batch & Shell
gelöst Powershell: Dateien nach Version löschen in mehreren Ordnern (4)

Frage von ImmerKind zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateien mit Powershell löschen und nur leere (symbolische) Datei hinterlassen (6)

Frage von evolution zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...