Multi-Umbenennen nach Dateiinhalt

German support forum

Moderators: white, Hacker, Stefan2

User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Multi-Umbenennen nach Dateiinhalt

Post by *Peter »

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
TC 10.xx / #266191
Win 10 x64
User avatar
Lefteous
Power Member
Power Member
Posts: 9535
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

2Peter
Mit dem passenden Inhaltsplugin sollte das kein Problem sein.
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Welches?

Post by *Peter »

Lefteous

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 )
Peter
TC 10.xx / #266191
Win 10 x64
User avatar
Lefteous
Power Member
Power Member
Posts: 9535
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

2Peter
Ne sorry da ist mir nichts bekannt. Das ist natürlich auch sehr speziell.
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Ich habe ja das Script-Plugin, das ja mit Ctrl-M läuft und auf Dateien zugreifen könnte.

Könnte man (ich bin weiterhin kein Script-Kenner) das nicht so lösen?

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

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

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)
So in der Art, das habe ich jatzt aber jetzt nicht ausprobiert, ist nur so als Denkanstoss.

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Juergen
Power Member
Power Member
Posts: 517
Joined: 2003-05-02, 18:19 UTC
Location: Berlin (Germany)
Contact:

Post by *Juergen »

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
My add-ons and plugins for TC: NiftyLink, mbox, Sequences
ricobautsch
Member
Member
Posts: 103
Joined: 2005-06-21, 00:42 UTC

Post by *ricobautsch »

Es gibt ein nettes Script-Content-Plugin.
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
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.
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

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
TC 10.xx / #266191
Win 10 x64
User avatar
Sheepdog
Power Member
Power Member
Posts: 5150
Joined: 2003-12-18, 21:44 UTC
Location: Berlin, Germany
Contact:

Post by *Sheepdog »

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?
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.

sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

2Sheepdog:
Habe es leider nicht zum laufen gebracht ...

2ricobautsch:
Läuft einwandfrei und blitzschnell - ganz toll.

Nochmals danke.

Peter
TC 10.xx / #266191
Win 10 x64
delll
Junior Member
Junior Member
Posts: 17
Joined: 2011-02-11, 08:51 UTC

Post by *delll »

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!!!
User avatar
Stefan2
Power Member
Power Member
Posts: 4159
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

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 ?
Folgendes Skript vorbereiten laut Anleitung.
(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? :D
Last edited by Stefan2 on 2011-02-14, 07:01 UTC, edited 1 time in total.
delll
Junior Member
Junior Member
Posts: 17
Joined: 2011-02-11, 08:51 UTC

Post by *delll »

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]
  • 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 
User avatar
Stefan2
Power Member
Power Member
Posts: 4159
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Script Content plugin - Inhalt von Datei Zeile Position

Post by *Stefan2 »

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!?
Ich habe jetzt einen Abbruch eingebaut nach dem die gewünschte Zeile gefunden wurde.
Vieleicht sind deine Dateien sehr groß? und da mein Skript alle Zeilen durchgelaufen hatte könnte das der Grund dafür sein.
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?
Mit meiner Änderung kannst du jetzt einmal verschiedene Vorgaben einpflegen
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! :D

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.
Post Reply