Multi-Umbenennen nach Dateiinhalt
Moderators: Hacker, Stefan2, white
Multi-Umbenennen nach Dateiinhalt
Ich habe text-Dateien, die automatisch nummeriert sind (1.txt, 2.txt, ..), die aber ihren echten Namen in der ersten Zeile des Dateiinhaltes stehen haben.
Kann ich den Namen da rauskriegen und damit umbenennen ?
(Ultra edit hätte ich auch noch..)
Peter
Kann ich den Namen da rauskriegen und damit umbenennen ?
(Ultra edit hätte ich auch noch..)
Peter
TC 10.xx / #266191
Win 10 x64
Win 10 x64
Welches?
Lefteous
gibt es da schon eines oder muss das noch wer erfinden?
Im konkreten geht es mir um HPGL/2-Plotfiles, die so beginnen:
Peter
gibt es da schon eines oder muss das noch wer erfinden?
Im konkreten geht es mir um HPGL/2-Plotfiles, die so beginnen:
Code: Select all
%-12345X@PJL JOB NAME = "Hier steht der gesuchte Text"
%-12345X@PJL SET DRIVERVERSION = v4.65 ( WinNT )
TC 10.xx / #266191
Win 10 x64
Win 10 x64
Na das sollte doch aber leichter mit einer Batchdatei erschlagen werden können.
Die erste Zeile in einzelne Token einlesen, das gesuchte Token in eine Datei reinschreiben und davor den Dateinamen und ein ren setzen
So in der Art, das habe ich jatzt aber jetzt nicht ausprobiert, ist nur so als Denkanstoss.
sheepdog
Die erste Zeile in einzelne Token einlesen, das gesuchte Token in eine Datei reinschreiben und davor den Dateinamen und ein ren setzen
Code: Select all
for /f %%a 'Dateilist' do for /f %%b (token1,2,3,4,5,6* ) do (echo ren %%a %%f >> umbenenn.cmd
goto :eof)
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Hallo Peter,
leider hast du hier keine E-Mail-Kontaktmöglichkeit angegeben. Teile mir doch mal deine Mail-Adresse mit an j {punkt} lue {at} gmx {punkt} de.
Vielleicht habe ich eine Lösung.
Gruß, Jürgen
leider hast du hier keine E-Mail-Kontaktmöglichkeit angegeben. Teile mir doch mal deine Mail-Adresse mit an j {punkt} lue {at} gmx {punkt} de.
Vielleicht habe ich eine Lösung.
Gruß, Jürgen
My add-ons and plugins for TC: NiftyLink, mbox, Sequences
-
- Member
- Posts: 103
- Joined: 2005-06-21, 00:42 UTC
Es gibt ein nettes Script-Content-Plugin.
Zu finden hier.
Nun brauchts nur ein geeignetes Script.
Das Script sucht in der ersten Zeile einer Datei nach den Anführungszeichen (") und gibt den eingeschlossenen Text zurück.
Damit sollte die Aufgabe nun im Mehrfach-Umbenenntoll leicht zu erledigen sein.
Zu finden hier.
Nun brauchts nur ein geeignetes Script.
Code: Select all
Set fso = CreateObject("Scripting.FileSystemObject")
Set oTextStream = fso.OpenTextFile(filename)
If not oTextStream.AtEndOfStream Then
s = oTextStream.ReadLine
Pos1 = InStr(1, s, """")
Pos2 = InStrRev(s, """")
If (Pos1 > 0) and (Pos2 > Pos1) Then
content = Mid(s, Pos1 + 1, Pos2 - Pos1 - 1)
Else
content = "not found"
End If
End If
oTextStream.Close
Damit sollte die Aufgabe nun im Mehrfach-Umbenenntoll leicht zu erledigen sein.
2Sheepdog:
Mein Batchkenntnisse sind weiterhin bescheiden, aber sehe ich das richtig, dass deine Funktion davon ausgeht, das in einer "dateilist" die Definitionen für alle Dateien vorhanden sind? Oder habe ich das wieder nicht verstanden?
2ricobautsch:
Schaut gut aus, ich werde es morgen testen.
Danke an alle.
Peter
Mein Batchkenntnisse sind weiterhin bescheiden, aber sehe ich das richtig, dass deine Funktion davon ausgeht, das in einer "dateilist" die Definitionen für alle Dateien vorhanden sind? Oder habe ich das wieder nicht verstanden?
2ricobautsch:
Schaut gut aus, ich werde es morgen testen.
Danke an alle.
Peter
TC 10.xx / #266191
Win 10 x64
Win 10 x64
Genau. 'Dateilist' sollte eben die Dateiliste beinhalten, welche Dateien umzubenennen sind. Dies kann man ja auf verschieden Arten realisieren, entweder über ein "dir /b *.irgendwas" Kommando oder über eine wirklich Liste die übergeben wird. Da soll dann in jeder Datei die erste Zeile gelesen werden, dann wird die soundsovielte Zeichenkette ausgelesen und in die Datei geschrieben und mit "goto :eof" die innere For-Schleife abgebrochen.Peter wrote:sehe ich das richtig, dass deine Funktion davon ausgeht, das in einer "dateilist" die Definitionen für alle Dateien vorhanden sind? Oder habe ich das wieder nicht verstanden?
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Hallo.
ich wollte mal aus gegebenem Anlass dies alte Thema reaktivieren.
Ich habe hier viele Steuerdateien von verschiedenen Systemen, die ich umbennen muss. Wenn ich mit F3 den internen Editor aufrufe kann ich bestimmte Steuernummern sehen. Diese würde ich gerne vor den Dateinamen einfügen. Zum Beispiel solte der Dateiname dann hinterher so aussehen:
[Zeichen 3-9 lt. Editor]_[Alter Dateiname].[Extension]
z.B.: 2513_Maschine1.dat
Wie bekomme ich das hin ?
Sonst müsste ich nämlich in alle Datein schauen, den Text (Zeichen 3-9) kopieren und manuel vor den Dateinamen setzen Sad
http://www.ghisler.ch/board/viewtopic.php?t=11518 klingt recht gut aber leider komme ich da nicht mit weiter, da ich weder VBS oder JS kann Sad Ich habe keinen Plan, wie ich an die Sache ran gehen soll, damit ich im Umbenenntool die passenden Ergebnisse bekommen. Wer kann mir gaaaanz einfach erklären, wo ich was in dem Script ändern muss, damit ich einfach festlegen kann: Gib mir z.B. Zeiche 2 bis 7 der Datei zurück? Mit den geladenen Script (unter totalcmd[dot]net das Script "Script Content Plugin 0.2.0.0") bekomme ich halt 10 Möglichkeiten, weiß aber nicht welche bzw. wie ich die einstellen könnte.
Bin für jeden Tipp zu dem Script oder anderen Tools dankbar!!!
ich wollte mal aus gegebenem Anlass dies alte Thema reaktivieren.
Ich habe hier viele Steuerdateien von verschiedenen Systemen, die ich umbennen muss. Wenn ich mit F3 den internen Editor aufrufe kann ich bestimmte Steuernummern sehen. Diese würde ich gerne vor den Dateinamen einfügen. Zum Beispiel solte der Dateiname dann hinterher so aussehen:
[Zeichen 3-9 lt. Editor]_[Alter Dateiname].[Extension]
z.B.: 2513_Maschine1.dat
Wie bekomme ich das hin ?
Sonst müsste ich nämlich in alle Datein schauen, den Text (Zeichen 3-9) kopieren und manuel vor den Dateinamen setzen Sad
http://www.ghisler.ch/board/viewtopic.php?t=11518 klingt recht gut aber leider komme ich da nicht mit weiter, da ich weder VBS oder JS kann Sad Ich habe keinen Plan, wie ich an die Sache ran gehen soll, damit ich im Umbenenntool die passenden Ergebnisse bekommen. Wer kann mir gaaaanz einfach erklären, wo ich was in dem Script ändern muss, damit ich einfach festlegen kann: Gib mir z.B. Zeiche 2 bis 7 der Datei zurück? Mit den geladenen Script (unter totalcmd[dot]net das Script "Script Content Plugin 0.2.0.0") bekomme ich halt 10 Möglichkeiten, weiß aber nicht welche bzw. wie ich die einstellen könnte.
Bin für jeden Tipp zu dem Script oder anderen Tools dankbar!!!
Folgendes Skript vorbereiten laut Anleitung.delll wrote:ich habe hier viele Steuerdateien die ich umbennen muss.
Wenn ich mit F3 den internen Editor aufrufe kann ich bestimmte Steuernummern sehen.
Diese würde ich gerne vor den Dateinamen einfügen.
Zum Beispiel solte der Dateiname dann hinterher so aussehen:
[Zeichen 3-9 lt. Editor]_[Alter Dateiname].[Extension]
z.B.: 2513_Maschine1.dat
Wie bekomme ich das hin ?
(z.B. hier:http://www.ghisler.ch/board/viewtopic.php?p=206065#206065)
Da ich das Skript nicht Stundenlang getestet habe teste du es zuerst mit einigen Testdateien.
Ich übernehme keine Garantie das das Skript 100% Fehlerfrei läuft,
zumal ich noch keine Fehlerbehandlung eingebaut habe.
Die Datei(en) markieren und mit Strg+M das MultiUmbenennungsTool starten.
Im Feld Dateiname folgendes auswählen/eintragen:
[=script.Result]_[N]
EDIT EDIT EDIT :
find an better script in an post below.
Weiter unten gibt es ein Post mit einem verbesserten Skript.
Code: Select all
'Script Content plugin 0.2.0.0'Lev Freidin (c) 2005-2008 for Total Commander
'Download: http://www.totalcmd.net/plugring/script_wdx.html
'Usage: http://www.ghisler.ch/board/viewtopic.php?p=206065#206065
'// User settings:
'Read line "vLine" from selected file
'and get content from pos "vPosStart" till pos "vPosEnd"
vLine = 1
vPosStart = 3
vPosEnd = 9
'// VBS code:
'don't edit code below if you don't know what you do:
Set fso = CreateObject("Scripting.FileSystemObject")
Set oTextStream = fso.OpenTextFile(filename)
Index = 0
Do while not oTextStream.AtEndOfStream
Index = Index + 1
s = oTextStream.ReadLine()
If (Index = vLine) then
vString = Mid(s, vPosStart, vPosEnd - vPosStart + 1)
If vString > "" Then
content = vString
'content1 = s 'debug: print whole line
Else
content = "not found"
End If
End If
Loop
oTextStream.Close
Set oTextStream = nothing
Set fso = nothing
Da du einmal von Zeichen 3-9 und einmal von 2-7 redest
und da die Länge von "2513" weder 6 noch 5 ist,
musst du die Variablen vPosStart und vPosEnd im Skript selbst anpassen.
HTH?

Last edited by Stefan2 on 2011-02-14, 07:01 UTC, edited 1 time in total.
Oh mein Gott, das ging ja schnell!!!
Herzlichen Dank schon einmal. Ich habe das Script versucht entsprechend umzubauen und in den TC einzubinden. Habe nur 4 Musterdateien hier Zuhause und habe dafür das neue Script getestet. (Ich hoffe ich habe alles richtig eingebunden, siehe unten).
Ein paar Fragen noch dazu.
Zum einen dauert es sehr lange bis die Anzeige kommt, einschließlich der Meldung des TC "Keine Rückmeldung", obwohl es anschließend richtig angezeigt wird. Die 4 Testdateien brauchen wohl so 30-90 Sekunden!? Eine einzelne Datei klappt wesentlich besser!?
Ist es richtig, dass ich dann im Umbenenntool auf PlugIn -> Result gehen muss und könnte man dort nicht die verschiedenen Versionen (Stelle 2-7, Stelle 4-12 usw.) anzeigen und nutzen lassen?
[Die Stellen sind halt nicht immer die gleichen, aber es gibt glaube ich so 5-6 verschiedene Versionen)
Müsste ja sonst für die diversen Dateien immer wieder das "Script"-Lister-Plugin neu installieren?
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[script_wdx_0.2.0.0_inhalt_1-12.zip]
[inhalt.vbs]
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[script.ini]
Herzlichen Dank schon einmal. Ich habe das Script versucht entsprechend umzubauen und in den TC einzubinden. Habe nur 4 Musterdateien hier Zuhause und habe dafür das neue Script getestet. (Ich hoffe ich habe alles richtig eingebunden, siehe unten).
Ein paar Fragen noch dazu.
Zum einen dauert es sehr lange bis die Anzeige kommt, einschließlich der Meldung des TC "Keine Rückmeldung", obwohl es anschließend richtig angezeigt wird. Die 4 Testdateien brauchen wohl so 30-90 Sekunden!? Eine einzelne Datei klappt wesentlich besser!?
Ist es richtig, dass ich dann im Umbenenntool auf PlugIn -> Result gehen muss und könnte man dort nicht die verschiedenen Versionen (Stelle 2-7, Stelle 4-12 usw.) anzeigen und nutzen lassen?
[Die Stellen sind halt nicht immer die gleichen, aber es gibt glaube ich so 5-6 verschiedene Versionen)
Müsste ja sonst für die diversen Dateien immer wieder das "Script"-Lister-Plugin neu installieren?
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[script_wdx_0.2.0.0_inhalt_1-12.zip]
- addzeros.vbs
exeup.vbs
ext.vbs
history.txt
htm.vbs
inhalt.vbs _ (siehe unten)
java.js
links.txt
pluginst.inf
readme.txt
script.ini _ (siehe unten)
script.wdx
[inhalt.vbs]
Code: Select all
'Script Content plugin 0.2.0.0'Lev Freidin (c) 2005-2008 for Total Commander
'Download: http://www.totalcmd.net/plugring/script_wdx.html
'Usage: http://www.ghisler.ch/board/viewtopic.php?p=206065#206065
'// User settings:
'Read line "vLine" from selected file
'and get content from pos "vPosStart" till pos "vPosEnd"
vLine = 1
vPosStart = 1
vPosEnd = 12
'// VBS code:
'don't edit code below if you don't know what you do:
Set fso = CreateObject("Scripting.FileSystemObject")
Set oTextStream = fso.OpenTextFile(filename)
Index = 0
Do while not oTextStream.AtEndOfStream
Index = Index + 1
s = oTextStream.ReadLine()
If (Index = vLine) then
vString = Mid(s, vPosStart, vPosEnd - vPosStart + 1)
If vString > "" Then
content = vString
'content1 = s 'debug: print whole line
Else
content = "not found"
End If
End If
Loop
oTextStream.Close
Set oTextStream = nothing
Set fso = nothing
[script.ini]
Code: Select all
[Script]
Section=inhalt
;js
;Extension
;exe-arc up
;AddZeros
[Defaults]
LongName=1
ParseDirs=0
[Extension]
Script=ext.vbs
[AddZeros]
Script=AddZeros.vbs
LongName=0
[exe-arc up]
Script=Exeup.vbs
LongName=0
[js]
Script=java.js
LongName=0
[inhalt]
Script=inhalt.vbs
LongName=0
ParseDirs=1
Script Content plugin - Inhalt von Datei Zeile Position
Ich habe jetzt einen Abbruch eingebaut nach dem die gewünschte Zeile gefunden wurde.delll wrote:Zum einen dauert es sehr lange bis die Anzeige kommt, einschließlich der Meldung des TC "Keine Rückmeldung",
obwohl es anschließend richtig angezeigt wird. Die 4 Testdateien brauchen wohl so 30-90 Sekunden!?
Eine einzelne Datei klappt wesentlich besser!?
Vieleicht sind deine Dateien sehr groß? und da mein Skript alle Zeilen durchgelaufen hatte könnte das der Grund dafür sein.
Mit meiner Änderung kannst du jetzt einmal verschiedene Vorgaben einpflegenIst es richtig, dass ich dann im Umbenenntool auf PlugIn -> Result gehen muss und könnte man dort
nicht die verschiedenen Versionen (Stelle 2-7, Stelle 4-12 usw.) anzeigen und nutzen lassen?
[Die Stellen sind halt nicht immer die gleichen, aber es gibt glaube ich so 5-6 verschiedene Versionen)
Müsste ja sonst für die diversen Dateien immer wieder das "Script"-Lister-Plugin neu installieren?
und dann je nach Bedarf die gewünschte Vorgabe im TC
mittels [=script.ResultX] auswählen,
wobei man das X durch eine Ziffer 1 bis 9 ersetzt
(insgesamt kann man sich so sogar 10 Vorgaben setzen => [=script.Result] ohne Ziffer)
Beispiel:
'// User settings:
' Get content from Line L, StartPossition S, till EndPossition E
' Syntax: GetContent( Line, Startpos, Endpos)
content3 = GetContent(3,1,4) 'in TC use [=script.Result3] to get this result
HTH?
Beachte: ich benötige dieses Skript nicht und habe es nur unzulänglich getestet >>> Benutzung auf eigene Gefahr.
Teste es vorher mit unwichtigen Dateikopien!

Code: Select all
'VBscript for Total Commander with
' Script Content plugin 0.2.0.0'Lev Freidin (c) 2005-2008
' Plugin Download: http://www.totalcmd.net/plugring/script_wdx.html
' Plugin Usage: http://www.ghisler.ch/board/viewtopic.php?p=206065
' Purpose of this script:
' get line content from current file, from pos1 till pos2
' for to use this info with renaming tool or for user columns
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'code init, don't modify:
Set fso = CreateObject("Scripting.FileSystemObject")
Set oTextStream = fso.OpenTextFile(filename)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'// User settings, modify this as you need:
' Get content from Line L, StartPossition S, till EndPossition E
' Syntax: GetContent( Line, Startpos, Endpos )
'content = GetContent(1,1,4) 'in TC use [=script.Result] to get this result
content1 = GetContent(1,1,4) 'in TC use [=script.Result1] to get this result
content2 = GetContent(2,1,4) 'in TC use [=script.Result2] to get this result
content3 = GetContent(3,1,4) 'in TC use [=script.Result3] to get this result
content4 = GetContent(4,1,4) 'in TC use [=script.Result4] to get this result
'content5 = GetContent(1,10,25)
'content6 = GetContent(6,1,15)
'content7 = GetContent(3,30,34)
'content8 = GetContent(2,8,9)
'content9 = GetContent(1,1,4)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'// VBS code:
'don't edit code below if you don't know what you do:
Function GetContent(vL, vS, vE)
Index = 0
Do while not oTextStream.AtEndOfStream
Index = Index + 1
s = oTextStream.ReadLine()
s = trim(s)
If (Index = vL) Then
If (s <> "") Then
vString = Mid(s, vS, vE - vS + 1)
If vString > "" Then
GetContent = RemoveInvalidChars(vString)
Else
GetContent = "(nothing found)"
End If
Else
GetContent = "(line was empty)"
End If
Exit Do
End If
Loop
End Function
Function RemoveInvalidChars(str)
RemoveInvalidChars = str
MyArray = Array("<", ">", "|", "/", "*", "", "?", ":", """")
For X = 0 To UBound(MyArray)
'RemoveInvalidChars:
'RemoveInvalidChars = Replace(RemoveInvalidChars, MyArray(X), "", 1)
'exchange InvalidChars by an underscore:
RemoveInvalidChars = Replace(RemoveInvalidChars, MyArray(X), "_", 1)
Next
End Function
oTextStream.Close
Set oTextStream = nothing
Set fso = nothing
Last edited by Stefan2 on 2011-02-14, 19:55 UTC, edited 2 times in total.