rumpelstielzchen987
Goto Top

unregelmäßige zeichenlänge am anfang einer txt-datei auslesen und vergleichen lassen

erst mal zum terrain:
also
ich habe mir einen cryptomaten aus ncryptschnippseln zusammengebastelt, der beim verschlüsseln ein beliebiges format in eine txt umbenennt, deren inhalt verschlüsselt und an einen rechner sendet. an diesem rechner wird das passende decrypt-programm mit den passwortdateien gespeist und decodiert den zeichensalat ein wenig. nun soll diese decrypt.bat den anfang der klartextdatei lesen um daraus das ursprüngliche format zu erschließen und die datei wieder richtig umzubenennen.

dazu habe ich mir mal die arbeit gemacht und eindeutige identifikationsgesichtspunkte von in txt umbenannten dateiformaten analysiert:
if BM6 am anfang der datei, rename output.txt output.bmp
Rar! am anfang der datei, rename output.txt output.rar
ID3 am anfang der datei, rename output.txt output.mp3
ÿØÿà am anfang der datei, rename output.txt output.jpg
‰PNG am anfang der datei, rename output.txt output.png
MZ am anfang der datei, rename output.txt output.exe
<html <head <body <!DOCTYPE html am anfang der datei, rename output.txt output.html
%PDF am anfang der datei, rename output.txt output.pdf
PK am anfang der datei, rename output.txt output.zip
.RMF am anfang der datei, rename output.txt output.rmm
MZ am anfang der datei, rename output.txt output.dll
º! oder ³ am anfang der datei, rename output.txt output.mpg
{\rtf1 am anfang der datei, rename output.txt output.rtf
MSCF am anfang der datei, rename output.txt output.cab
FWS oder CWS am anfang der datei, rename output.txt output.swf
y&#8212;ÀX am anfang der datei, rename output.txt output.csa
GIF am anfang der datei, rename output.txt output.gif
II* am anfang der datei, rename output.txt output.tif
oggs am anfang der datei, rename output.txt output.ogg
RIFF?? WAVEfmt am anfang der datei, rename output.txt output.wav
RIFF??? AVI am anfang der datei, rename output.txt output.avi
bei sehr vielen anderen formaten wie doc, ppt, xls, msi, itw, wma und sehr sehr vielen anderen bin ich auf kein für dieses format typisches merkmal gestoßen was sich nur bei diesem dateityp wiederholt.
nun ist ein problem, dass ich nicht weiß wie ich den anfang einer txt auslese, ein anderes, dass die anzahl der zu lesenden buchstaben ungleich ist (mal sind 12 buchstaben mit platzhaltern notwendig, ein anderes mal nur 2 um eindeutig das format zu bestimmen) und ein weiteres, dass bei avi und wav die jokerzeichen jokerzeichen sind (anders als bei tif). hier steht nach dem riff bei wav 2 zeichen lang blumentopferde und bei riff von avi 3 mal irgendein zeichen das bei jeder weiteren umbenannten avi anders ist.

mit den bereits hier im forum genannten beispielen konnte ich mir irgendwie keinen brauchbaren näherungswert reimen.

ich denke mal, man wird die erste zeile lesen, deren anfang mit den bekannten zeichen vergleichen und daraufhin die dateinamen ändern.

ein fertiges programm dafür zu nehmen wäre langweilig. und gnupg zu modifizieren, dazu bin ich nicht in der lage^-^

falls jemand einen besseren weg kennt, bloß bescheid sagen. ich bin wie man sieht noch ziemlicher noob und freue mich über jedes hilfeangebot.

Gruß von dem bösen das jeder kennt, doch das niemand beim namen nennt.

Content-ID: 44827

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

Ausgedruckt am: 13.11.2024 um 07:11 Uhr

bastla
bastla 19.11.2006 um 18:40:28 Uhr
Goto Top
Hallo rumpelstielzchen987!

Bevor Du Dir mit Batch ein Bein ausreisst, vielleicht ein VBScript ...

Gleich vorweg: VBScript ist für die Bearbeitung von Text-, nicht von Binärdateien vorgesehen - sei also nicht überrascht, wenn zB ein Null-Byte Probleme bereitet. Da Du aber ohnehin nur eine bestimmte Anzahl von Zeichen benötigst, könnte es wie folgt gehen:
'CheckFileType.vbs  
Dim sSignature(3), sTyp(3)
sSignature(1) = "y&#8212;ÀX " : sTyp(1) = "csa"  
sSignature(2) = "ÿØÿá" : sTyp(2) = "jpg"  
sSignature(3) = "ID3" : sTyp(3) = "mp3"  
sTestFile = WScript.Arguments(0)
Set fso = WScript.CreateObject("Scripting.FileSystemObject")  
Set oFile = fso.OpenTextFile(sTestFile, 1)
sStart = oFile.Read(15)
oFile.Close
sTypGefunden = "NotFound"  
For i = 1 To UBound(sSignature)
	If Left(sStart, Len(sSignature(i))) =  sSignature(i) Then
		sTypGefunden = sTyp(i)
		Exit For
	End If
Next
WScript.Echo sTypGefunden
Aus angeborener Faulheit habe ich nur 2 3 Beispiele eingegeben, daher also bitte Liste am Anfang ergänzen! Die Anzahl der zu lesenden Zeichen mit derzeit 15 kannst Du an den längsten vorkommenden String anpassen.
Bei Aufruf von der Commandline mit
cscript //nologo C:\Scripts\CheckFileType.vbs "C:\Pfad mit Leerstellen\Test.txt"  > %Temp%\Typ.txt 
erhältst Du in der Textdatei "%Temp%\Typ.txt" den festgestellten Dateityp (oder "NotFound") für "C:\Pfad mit Leerstellen\Test.txt" und kannst mit Batch weitermachen (vorausgesetzt wurde, dass die Scriptdatei im Ordner "C:\Scripts" liegt).

Wenn Du übrigens die zu testende Datei auf die Scriptdatei ziehst, wird das Ergebnis in einer MessageBox angezeigt.

HTH
bastla

[Edit] Weil die anderen gar so verunstaltet waren, habe ich (trotz Faulheit) noch "mp3" dazugenommen. [/Edit]
bastla
bastla 19.11.2006 um 19:36:20 Uhr
Goto Top
Ergänzung: Um auch per Errorlevel den Erfolg der Suche abfragen zu können, noch als letzte Zeile hinzufügen:
If sTypGefunden = "NotFound" Then WScript.Quit(1)  

bastla
Biber
Biber 19.11.2006 um 19:49:32 Uhr
Goto Top
Hallo rumpelstielzchen987!

Bevor Du Dir mit VBscript ein Bein ausreisst, vielleicht ein simpler Batch... **gg

Leg Dir für Deine HeaderInformationen eine einfache 2-spaltige Textdatei an (mit einem Leerzeichen zwischen Signatur und Extension):

-------snipp Headerinfo.txt ---------------> mit deinem Editor im DOS-Zeichensatz speichern; nicht im ANSI-Zeichensatz.
HeaderTag FileExtension 
BM6 .bmp
Rar!  .rar
ID3 .mp3
ÿØÿà .jpg
ëPNG .png
....
MSCF .cab
....

Die Batchdatei sähe etwas kürzer aus als bastla's Schnipsel:
::-----GetExtensionBySignature.bat
@echo off & setlocal
Set /p Signature=<output.txt
For /f "skip=2 tokens=2" %%i in ('Find "%signature%" Headerinfo.txt ^2^>nul') do Set "Extension=%%i"  
@echo Signatur: [%signatur%] ...... Extension: [%Extension%]
if defined extension rename output.txt output%extension%

Ich hab sie mir zum Testen etwas umgeschrieben:
::-----snipp GetExtBySigTest.bat
@echo off & setlocal
Set /p Signature=<%1
For /f "skip=2 tokens=2" %%i in ('Find "%signature%" Headerinfo.txt ^2^>nul') do Set "Extension=%%i"  
@echo Signatur: [%signature%] ...... Extension: [%Extension%]
...damit ich eine beliebige Datei testen kann (die ich Parameter übergebe). Bei Dir heißt die ja immer output.txt
Ergebnis:
>
>getExtBySigTest.bat iuident.cab
Signatur: [MSCF] ...... Extension: [.cab]

>getExtBySigTest.bat xsetlogo.png
Signatur: [‰PNG] ...... Extension: [.png]

Grüße
Biber
rumpelstielzchen987
rumpelstielzchen987 19.11.2006 um 20:05:43 Uhr
Goto Top
vielen dank für die antworten... wenn eure tipps nicht funktionieren, melde ich mich wieder xD

Gruß von dem bösen das jeder kennt, doch das niemand beim namen nennt.

EDIT: einige kleinigkeiten hab ich aber noch:
bei .html kann es sein dass die html-datei mit <doctype! html beginnt. ein leerzeichen in der signatur. bei mpg ist eigentlich auch eins davor, das durch das forum autokorrigiert wurde. stören die, oder wird %Extension% durch den punkt erkannt? wohl nicht... fällt da jemandem eine lösung ein?

das zweite problem sind die jokerzeichen bei wav und avi die als jokerzeichen dienen. hier unterscheiden sich auch avis untereinander. wie kann ich dem script sagen, dass bei avi und bei wav wirkliche platzhalter im spiel sind? wenn ich das pauschalisiere und alle joker als joker nehmen lasse klappt es ja auch...

lässt sich die Headerinfo.txt nicht auch in die bat einbinden? das müsste ja dann für den "stapelverarbeiter" als "nichtbefehl", für das script aber als signatur gelten... wenn es nicht geht pack ich es in einen beiliegenden "sources"-ordner... auch kein problem. Danke aber schon im vorraus.
Biber
Biber 19.11.2006 um 20:20:54 Uhr
Goto Top
@Rumpel
wenn eure tipps nicht funktionieren, melde ich mich wieder

bastla's Tipps funktionieren immer...
Ich würde mich freuen, wenn Du auch eine Rückmeldung gibst, wenn es einfach works as designed.

Thx
Biber
bastla
bastla 19.11.2006 um 20:26:49 Uhr
Goto Top
@stielz
Glaub ihm kein Wort face-wink

@Biber
In Zukunft fabriziere ich auch nur mehr few-liner (etwa so, wobei ich noch mindestens eine Zeile verschenkt habe):
Dim Sig(3),Typ(3):Sig(1)="y&#8212;ÀX":Typ(1)="csa":Sig(2)="ÿØÿá":Typ(2)="jpg":Sig(3)="ID3":Typ(3)="mp3"  
s=WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0),1).Read(15)  
t="NotFound":For i=1 To UBound(Sig):If Left(s,Len(Sig(i)))=Sig(i) Then t=Typ(i):Exit For  
Next:WScript.Echo t:If t="NotFound" Then WScript.Quit(1)  

Grüße
bastla
Biber
Biber 19.11.2006 um 21:02:39 Uhr
Goto Top
@bastla
Das wäre aber kryptisch... *gg
Ich würde zwar auch ohne Hilfsdatei auskommen, aber das verkneif ich mir...
@echo off & setlocal & Set /p Signature=<%1
For %%s in (BM6.bmp Rar!.rar ID3.mp3 ÿØÿà.jpg ëPNG.png MSCF.cab) Do (
 For /f "tokens=1-2 delims=." %%a in ("%%s") do  If /i [%signature%]==[%%a] Echo Extension=.%%b  
)

Demo:
>getExtBySignature.bat iuident.cab
Extension=cab

>getExtBySignature.bat xsetlogo.png
Extension=png

Grüße
Biber
bastla
bastla 19.11.2006 um 21:15:37 Uhr
Goto Top
@Biber
Ich trag's mit Fassung ...

À propos "kryptisch": Magst Du mir erklären, warum bei Deinem Schnipsel oben das "Find" überhaupt funktioniert? Syntaktisch schaut das für mich etwas sehr ungewöhnlich aus (wobei ich grundsätzlich schon die Verwendung von "Find" mit Pipe als Filter bzw mit Umleitung der Eingabe kenne).

Wieso das Escape für die Umleitung der Fehlermeldungen (^2^>nul)?

Und übrigens ...
<nitpick>
Mit "Find" kannst Du aber eigentlich nicht sicher sein, dass der Suchstring am Anfang der Datei steht, und durch die Schleife kommt die letzte Übereinstimmung zum Zug (wobei es natürlich ziemlicher Zufall sein müsste, dass etwa ein mp3-File die dem String "{\rtf1" entsprechenden Bytes enthielte)?
</nitpick>

Grüße
bastla
rumpelstielzchen987
rumpelstielzchen987 19.11.2006 um 21:28:14 Uhr
Goto Top
wäre jemand so freundlich mal zusammenzufassen und meine editeinträge zu beachten?^^

nichts für ungut ich bin euch echt sehr dankbar.
Biber
Biber 19.11.2006 um 22:06:43 Uhr
Goto Top
@bastla
Wieso das Escape für die Umleitung der Fehlermeldungen (^2^>nul)?
Das ist nur für den Fall, dass die Extension nicht gefunden wäre....
... aber da Find/Findstr ja nur Fehlermeldungen bringen bei Syntaxfehlern oder wenn die zu durchsuchende Datei fehlt, ist es eigentlich überflüssig.
Maskieren muss ich mit dem Caret "^" innerhalb der FOR-Anweisungsklammer alles, was für die CMD.exe ein Steuerzeichen ist.
Und "2" und ">" gehören dazu.

Mit "Find" kannst Du aber eigentlich nicht sicher sein, dass der Suchstring am Anfang der Datei steht,
Ja mei.... da in der Textdatei nur knapp 10 Zeichen in einer Zeile stehen, z.B. "ëPNG .png" oder "MSCF .cab" , kann ich damit leben.

Und sonst könnte ich natürlich auf "Find.exe" verzichten und es wie in der zweiten Skizze machen mit direktem Vergleich "..
Siehe das... "....If /i [%signature%]==[%%a]..."

@Rumpel
wäre jemand so freundlich mal zusammenzufassen

Jau. sowohl bastla wie ich wären so vorgegangen, jeweils die "Signatur" bzw die ersten Bytes der output.txt mit einem ebenfalls als "Text" vorliegenden Matchstring zu vergleichen.
Exakt. Ohne Berücksichtigung der "Wildcard-Varianten", die Du genannt hast. Da fassen wir beide ins Leere.

Werde ich auch nicht mit Batch-Mitteln gebacken bekommen, weil ich dann auch mit Wildcards vergleichen - also letzten Endes mit Regular Expressions arbeiten müsste.
Das kann von den Konsolen-Utilities aber nur FindStr.exe, nicht aber Find.exe.
Aber: FindStr.exe ist leider schnell und lieblos zusammengeschustert worden von Microsoft...
...da kann ich GAR NICHT mit Zeichen der erweiterten Zeichensätze suchen (nicht mal nach Umlauten).

Auch bastla bzw. VBScript ist mit Regular Expressions ein bisschen überfordert, denke ich.
Wir sollten also alle auf jemand warten, der entweder mit PERL das Kram abfackelt ODER auf jemand, der Lust hat,
diese Signaturen Byte für Byte als HexCode zu vergleichen.

Andererseits wird dann früher oder später die Frage kommen, wieso das überhaupt sein muss...
Du musst die Informationen, welche Dateiendungen sich hinter/unter dem namen der output.txt verbergen, doch gehabt haben VOR dem Verschlüsseln??
Wieso hast Du nicht aufbewahrt?? Schlechte Planung? *gg

Ich habe vorhin geantwortet, weil es natürlich mit einfachen Mitteln möglich ist,
die ersten paar Bytes eines unbekannten Files als Dateityp zu interpretieren, aber zuverlässig ist es nicht.

Siehe Deine "MZ"-Interpretation als "*.exe" und als "*.dll".
Und als weiteres Indiz, dass es keine funktionierenden Windows-Utilities gibt, die GetFileType.exe heißen. face-wink
Unter *nix-Systemen ist das kein Thema.

Gruß
Biber
bastla
bastla 19.11.2006 um 22:20:11 Uhr
Goto Top
Hallo rumpelstielzchen987!

bei .html kann es sein dass die html-datei mit <doctype! html beginnt. ein leerzeichen in der signatur. bei mpg ist eigentlich auch eins davor, das durch das forum autokorrigiert wurde. stören die, oder wird %Extension% durch den punkt erkannt? wohl nicht... fällt da jemandem eine lösung ein?
Wenn die Signaturen richtig eingelesen werden (was zu testen wäre, aber bei "<doctype! html" klappen müsste), stören Blanks sicherlich nicht.

das zweite problem sind die jokerzeichen bei wav und avi die als jokerzeichen dienen. hier unterscheiden sich auch avis untereinander. wie kann ich dem script sagen, dass bei avi und bei wav wirkliche platzhalter im spiel sind? wenn ich das pauschalisiere und alle joker als joker nehmen lasse klappt es ja auch...
Dafür hatte ich bisher keine Vorsorge getroffen. Für die Spezialfälle "wav" und "avi" ließen sich aber zusätzliche Tests einbauen, etwa
If Left(sStart, 4) = "RIFF" Then If Mid(sStart, 9, 7) = "WAVEfmt" Then sTypGefunden = "wav"  

Im übrigen lässt sich natürlich das Umbenennen der übergebenen Datei (zB "output.txt") auch innerhalb des Scripts erledigen; verbesserte/ergänzte Version daher:

'SetFileType.vbs  
Dim sSignature(3), sTyp(3)
sSignature(1) = "y&#8212;ÀX " : sTyp(1) = "csa"  
sSignature(2) = "ÿØÿà" : sTyp(2) = "jpg"  
sSignature(3) = "ÿØÿá" : sTyp(3) = "jpg"  

sTestFile = WScript.Arguments(0)
Set fso = WScript.CreateObject("Scripting.FileSystemObject")  
Set oFile = fso.OpenTextFile(sTestFile, 1)
sStart = oFile.Read(15)
oFile.Close

sTypGefunden = "NotFound"  
For i = 1 To UBound(sSignature)
	If Left(sStart, Len(sSignature(i))) =  sSignature(i) Then
		sTypGefunden = sTyp(i)
		Exit For
	End If
Next
If Left(sStart, 4) = "RIFF" Then If Mid(sStart, 9, 7) = "WAVEfmt" Then sTypGefunden = "wav"  

If sTypGefunden <> "NotFound" Then  
	Set oFile = fso.GetFile(sTestFile)
	sNewName = Left(oFile.Name, InStrRev(oFile.Name, ".") - 1) & "." & sTypGefunden  
	oFile.Name = sNewName
End If

Verwendung des Scripts: Am einfachsten per Drag and Drop ("output.txt" auf das Script ziehen)

Anmerkung zu Sigs 2 und 3: Ich habe ".jpg"-Dateien mit den Varianten E0 oder E1 für Byte 3 gefunden ...

Grüße
bastla
bastla
bastla 19.11.2006 um 22:34:15 Uhr
Goto Top
@Biber

Darf ich Dich nochmals auf die "Find"-Syntax ansprechen? Ich hätte vermutlich etwas in der Art versucht:
For /f "tokens=1-2" %%a in (Headerinfo.txt) do Find "%%a" output.txt && Set "Extension=%%b"  

Bedeutet das "<%1" in Deiner Version, dass Du den gesamten Inhalt (zumindest soviel davon als Text verstanden wird) der "output.txt" als Suchbegriff verwendest und daher nach einem längeren String in einem kürzeren suchst?

Verwirrte Grüße
bastla
Biber
Biber 19.11.2006 um 22:53:03 Uhr
Goto Top
@bastla
Bedeutet das "<%1" in Deiner Version, dass Du den gesamten Inhalt (zumindest soviel davon als Text verstanden wird)
der "output.txt" als Suchbegriff verwendest
und daher nach einem längeren String in einem kürzeren suchst?
Jepp, exakt. Der erste Teil zumindest..."den gesamten Inhalt (zumindest soviel davon als Text verstanden wird) "
Auch wenn ich wenig Vertrauen in diese Ersten-paar-Bytes-Interpretationen habe:
wenn dort überhaupt etwas zum Wiederfinden hinterlegt ist, dann ist es mit Hex(0) abgeschlossen.
Und bis dahin lese ich.. *gg

Aber bei Binär-Dateien ist es dann nicht: "daher nach einem längeren String in einem kürzeren"...

Sonst würde meine Strategie so nicht funktionieren, da geb ich Dir Recht. *g
Und auch nicht, wenn rumpelchen sich für andere Matchstrings entschieden hat als die Zeichen, die vor einem 0x0 stehen...
[ Beispiel *.bmp-Dateien:
set /p head=<setup.bmp
set head
head=BM6ö
]

Also: meine Methode funktioniert bei Binärdateien ganz gut, aber...

Selbst eine normale Html-Datei erwisch ich nicht, fällt mir grad auf....
Textformate müsste ich separat abfackeln.... also .html, .txt, .xml,...und Hundert andere.... ich komme also auch nicht richtig weit.

Grüße
Biber
Biber
Biber 20.11.2006 um 00:56:03 Uhr
Goto Top
Sorry, rumpie,

Deine erwähnten <edit>s habe ich vorhin tatsächlich überlesen.
lässt sich die Headerinfo.txt nicht auch in die bat einbinden?
Ja, siehe meine zweite Variante mit den beiden FOR-Anweisungen.
das müsste ja dann für den "stapelverarbeiter" als "nichtbefehl", für das script aber als signatur gelten...
wenn es nicht geht pack ich es in einen beiliegenden "sources"-ordner... auch kein problem. Danke aber schon im vorraus

Aber jetzt möchte ich auf ein größeres Problem eingehen.

Ein Problem bei der angestrebten Strategie ist, dass sie eigentlich nicht funktionieren kann (um gleich mit der Tür ins Haus zu fallen). face-wink

Wir reden hier von Äpfeln und Birnen.

a) Äpfel oder Bnärdateien haben in den ersten Bytes eine Signatur... siehe bei .exe, .jpg, .mp3, .pdf, ...
Da passt meine Batch-Hauruck-Mimik.
b) Birnen oder Textfiles wie *.txt, *,vbs, *.cmd, *.xml, *.css, *.htm(l)
DIE HABEN KEINEN HEADER.
Sicherlich ganz deutlich bei *.txt-Dateien ...wie wolltest Du meine "Extension.txt" als Textdatei erkennen?
Bei XML oder HTM(L)-Dateien könnte man/frau die ersten 4 ("XML") oder 5 ("<HTML") Zeichen prüfen... aber auch das ist schon windig.
Eine .vbs oder .cvs oder .bat-Datei ist gar nicht an der ersten Zeile erkennbar. Es gibt auch keine bestimmte Zeile, die so eine Datei enthalten muss.

Führ ich jetzt nicht weiter aus... für mich erkennbar ist: Dateierkennung aufgrund Headerinfos geht nicht bei Nicht-Binärdateien. Ende,

Alternativstrategien:
1) Du lieferst die Original-Namen irgendwie mit. Für jede gesendete/bereitgestellte "Output.txt".
Die Mimik hab ich ohnehin nicht verstanden...
-was macht den der Empfänger mit einer Datei output.exe, die bei ihm ankommt? Erstmal anstarten?
- und wenn drei *.exe und vier *dll-Dateien gesendet werden oder 3000 *.jpg-Urlaubsfotos, kommt dann je eine output.exe und ein output.jpg an?
2) Oder - du sendest alle Dateien gleich immer im Zip-Format...also eine verschlüsslte output.txt, die eine entschlüsselte output.txt ergibt, die in Wirklichkeit eine output.zip ist...und in der natürlich alle Namen erhalten bleiben.
Das kannst Du dann aber lesbarer machen...sende eine inputcrypted.xyz, entschlüssele in eine Output.zip.
Was spräche dagegen?

Gruß
Biber
rumpelstielzchen987
rumpelstielzchen987 20.11.2006 um 16:30:31 Uhr
Goto Top
ich entschuldige mich für die vollkommene unpassendheit meiner letzten beiträge... war wohl nicht schnell genug mit dem aktualisieren...

Zitat:
Andererseits wird dann früher oder später die Frage kommen, wieso das überhaupt sein muss...
Du musst die Informationen, welche Dateiendungen sich hinter/unter dem namen der output.txt verbergen, doch gehabt haben VOR dem Verschlüsseln??
Wieso hast Du nicht aufbewahrt?? Schlechte Planung? *gg

jaa, ich habe bisher 2 batchs auf einem rechner... ncrypt verschlüsselt nur txt-dateien. um nun auch andere formate wie iso o.ä. zu verschlüsseln dachte ich mir, müsste ich mit der encrypt alle formate für das programm kompatibel machen, sprich: in txt umbenennen.
wenn ich die encrypt sich merken lasse, welches format es war, muss diese info ja auch an den decrypter auf dem anderen rechner übertragen werden... wenn man das in die output.txt die beim gegenüber ankommt reinschreibt, könnte daraus jemand der diese datei abfängt (mal rein hypothetisch) auf einen endgültigen dateianfang schließen und damit hinter den algorithmus kommen.
wenn jemandem ein weg einfällt, nur her damit.

zitat:
Die Mimik hab ich ohnehin nicht verstanden...
[1.]-was macht den der Empfänger mit einer Datei output.exe, die bei ihm ankommt? Erstmal anstarten?
[2.]- und wenn drei *.exe und vier *dll-Dateien gesendet werden oder 3000 *.jpg-Urlaubsfotos, kommt dann je eine output.exe und ein output.jpg an?

zu 1.
bei ihm käme eine output txt an... diese würde hoffentlich korrekt umbenannt werden und dann für den empfänger ohne jegliche ahnung von batch und scripting lesbar sein. er sollte möglichst nicht selber die txt öffnen müssen um zu sehen wie er die txt umbenennen soll und sie auch nicht selbst umbenennen sollen. alles automatisch eben.
ein anderer gedanke der mir bei diesem denkanstoß in den sinn gekommen ist, ist der, dass man das programm nur ursprüngliche input.txts, input.rars und/oder input.zips verschlüsseln und automatisch entschlüsseln lässt. alles andere bringt dem user die aufforderung die input.* bitte in ein archiv zu stopfen.
damit hätte sich auch der von dir angestoßene schwachpunkt über den ich mir noch keine gedanken gemacht habe (2.), da ich es ursprünglich für einzelne rechtlich eventuell nicht ganz einwandfreie dateien konzipiert habe, da sonst auch eine verschlüsselung zu lange dauern würde, in wohlgefallen aufgelöst.

mal zu meiner idee, nur rar und zip voneinander und von txt zu unterscheiden... wäre doch in bat bestimmt ganz einfach machbar, oder? wenn ja, wie?

Danke schon im vorraus

gruß vBdnk,danbNn

edit:
ok ich gebe zu, mein anfang nach dem 2. zitat war ein wenig missverständlich ausgedrückt... das mit der einen output.txt bezog sich auf 1., 2. hatte ich da noch außen vor gelassen, darauf gehe ich erst später ein... das war typisches brainstorming...
Biber
Biber 22.11.2006 um 10:39:08 Uhr
Goto Top
Moin rumpie,

nach einem oberflächlichen Test am CMD-Prompt sieht es so aus:

>set /p rarhead=<D:\temp\Irgendeine.rar

(=10:22:59  D:\temp=)
>set /p ziphead=<D:\temp\irgendein.zip

(=10:23:49  D:\temp=)
>echo Rarhead:[%rarhead%] ZipHead:[%ziphead%]
Rarhead:[Rar!&#8594;] ZipHead:[PK&#9829;&#9830;¶]

> auf diesem Weg kannst Du die Pseudosignaturen ermitteln, die das "set /p =<"-Kommando bei *.zip bzw. *.rar-Dateien reproduzierbar ausliest.

ACHTUNG: Die Anzeige des Ergebnisses stimmt naturlich nicht hier im HTML-Code, also selber am CMD-Prompt nachturnen. Kein Copy und Paste des Ergebnisses aus diesem Kommentar verwenden.

Diese beiden Matchstrings kannst Du dann in den oben geposteten Schnipsel einbauen.

:: ----snipp RarZipErkennung.bat [Parameter RarOderZipDateiname.mitbeliebigerExtension]
@echo off & setlocal & Set /p Signature=<%1
Set "rarSig=Rar!&#8594;"  
set "ZipSig=PK&#9829;&#9830;¶"  

For %%s in (%rarSig%.rar %zipSig%.zip) Do (
 For /f "tokens=1-2 delims=." %%a in ("%%s") do  If /i [%signature%]==[%%a] Echo Extension=.%%b  
)

[ungetestete Skizze .... würde toi toi toi *.zip und *.rar-Dateien erkennen.]

Gruß
Biber