Ähnliche Dateinamen finden und markieren

German support forum

Moderators: Hacker, Stefan2, white

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

Ähnliche Dateinamen finden und markieren

Post by *Peter »

Guten Tag allseits

in einem Verzeichnis gibt es Grunddaten (z.B. 1.doc, 2.do3, 3.doc, 4.doc) und daraus erzeugte "Produkte" (z.B. 1.pdf, 2.pdf, 3.pdf, 5.pdf).

Jetzt gibt es dazu verschiedene Aufgaben:

a) "Finde alle DOC, zu denen es kein PDF gibt" (z.B. 4.doc)
b) "Finde alle PDF, zu denen es kein DOC gibt" (z.B. 5.pdf)
c) Finde alle PDF, die älter als die zugehörige DOC und daher nicht mehr aktuell sind"

Natürlich soll das recht flexibel sien und sich nicht nur auf DOC und PDF beschränken. Man könnte natürlich die Dateiinfo in Access kopieren und dort arbeiten, aber eine Traumlösung ist das nicht.

Kennt jemand eine TC taugliche Lösung?

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
van Dusen
Power Member
Power Member
Posts: 684
Joined: 2004-09-16, 19:30 UTC
Location: Sinzig (Rhein), Germany

Post by *van Dusen »

Man könnte das z.B. per Script für das Script Content Plugin lösen. Leider kann ich nicht programmieren, kenne mich nicht mal mit Scriptsprachen aus, also lasst für mein Erstlingswerk bitte Gnade vor Recht ergehen ;) :

Code: Select all

'Script for Script Content Plugin
'(c)Lev Freidin, 2005
'http://www.totalcmd.net/plugring/script_wdx.html
'http://wincmd.ru/plugring/script_wdx.html

Dim fso, f1, f2
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.GetFile(filename)

sBaseIst = lcase(fso.GetBaseName(filename))
sExtIst = lcase(fso.GetExtensionName(filename))
sDateModF1 = f1.DateLastModified
sExtSoll1 = "doc"
sExtSoll2 = "pdf"
Const ForReading = 1


Select Case sExtIst

   Case sExtSoll1
      sResult = sExtSoll2 & "-Pendant "
      If fso.FileExists(sBaseIst & "." & sExtSoll2) Then
         Set f2 = fso.GetFile(sBaseIst & "." & sExtSoll2)
         sTimeDiff = DateDiff("n", sDateModF1, f2.DateLastModified)
         If sTimeDiff < 0 Then
            sResult = "2: " & sResult & "ist veraltet"
         Else
            sResult = "1: " & sResult & "ist aktuell"
         End If
         sResult = sResult & " (" & sTimeDiff & " Min. Diff.)"
      Else
         sResult = "3: " & sResult & "fehlt"
      End If

   Case sExtSoll2      
      If fso.FileExists(sBaseIst & "." & sExtSoll1) Then
         Set f2 = fso.GetFile(sBaseIst & "." & sExtSoll1)
         sTimeDiff = DateDiff("n", sDateModF1, f2.DateLastModified)
         If sTimeDiff >= 0 Then
            sResult = "2: Datei ist veraltet"
         Else
            sResult = "1: Datei ist aktuell"
         End If
         sResult = sResult & " (" & sTimeDiff & " Min. Diff.)"
      Else
         sResult = "3: " & sExtSoll1 & "-Pendant fehlt"
      End If

   Case Else
      sResult = ""

End Select

content = sResult

Set fso=nothing
Set f1=nothing
Set f2=nothing
Besonders flexibel ist das allerdings noch nicht. Kann man bestimmt optimieren.
User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Guten Tag van Dusen
van Dusen wrote:...Leider kann ich nicht programmieren, kenne mich nicht mal mit Scriptsprachen aus, also lasst für mein Erstlingswerk bitte Gnade vor Recht ergehen ;) :
Immerhin hast du ein Script verfasst - und ich kann das gar nicht. Herzlichen Dank, ich muss mich mal mit meinen scripterfahrenen Kollegen zusammensetzen und auch das Plugin muss ich mir mal anschauen.

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Hallo van Dusen

du hast auf http://www.ghisler.ch/board/viewtopic.php?t=8871 eine Anleitung verfasst, wie man das Script akiviert.

Ich habe nun
- das Plugin installiert
- die benutzerdefinierte Spalte angezeigt
- deinen Code genommen
- in "Dateivergleich.vbs" im Pluginverzeichnis gespeichert
- meine Script.ini geändert
- und dennoch geht es nicht :cry:

Ich glaube, in der ini ist was falsch ...

Peter

Code: Select all

[Script]
Section=Extension
;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

Section=Dateivergleich
[Defaults]
LongName=0
[Dateivergleich]
Script=Dateivergleich.vbs
TC 10.xx / #266191
Win 10 x64
User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Danke - hat sich (fast) erledigt.

Ich habe jetzt den Aufbau besser verstanden: mit den "Section" wird auf die unten angefügten Bereich verwiesen, und es kann immer nur eine Section aktiv sein. Die anderen muss man auskommentieren.

Aber was "Longname" und "ParseDirs" bedeuten und was die warum machen, ist mir nicht klar.

Peter

Code: Select all

[Script]
;Section=Extension
;Section=js
;Section=Extension
;Section=exe-arc up
;Section=AddZeros
Section=Dateivergleich

[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

[Dateivergleich]
Script=Dateivergleich.vbs
LongName=1
TC 10.xx / #266191
Win 10 x64
User avatar
van Dusen
Power Member
Power Member
Posts: 684
Joined: 2004-09-16, 19:30 UTC
Location: Sinzig (Rhein), Germany

Post by *van Dusen »

Peter wrote:Aber was "Longname" und "ParseDirs" bedeuten und was die warum machen, ist mir nicht klar.
LongName=1
Es werden lange Dateinamen an das Plugin übergeben.

LongName=0
Mit "Longname=0" dürften wohl die kurzen 8.3-Dateinamen an das Plugin übergeben werden (was im vorliegenden Fall zu unerwünschten, weil falschen Ergebnissen führt). Zum Testen setze LongName einfach mal auf '0', dann wird vom Script <Dateivergleich.vbs> beim Vorliegen der Dateinamen

<Langer Dateiname.pdf> und
<Langer Dateiname.doc>

als Ergebnis
<Langer Dateiname.pdf>, Result: "3: doc-Pendant fehlt"
<Langer Dateiname.doc>, Result: "3: pdf-Pendant fehlt"
ausgegeben.


ParceDirs=1
Es werden auch Verzeichnisse (Verzeichnisnamen) vom Plugin ausgewertet.

ParceDirs=0
Es werden nur Dateien (Dateinamen) vom Plugin ausgewertet, Verzeichnisse werden ignoriert (Result ist immer leer)

Der Schlüssel heißt übrigens wider Erwarten nicht ParseDirs, sondern tatsächlich ParceDirs. Findet man so, wenn man in der wdx-Datei des Plugins mal nach der Zeichenfolge "ParceDirs" bzw. "ParseDirs" sucht.
User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Danke bestens.
van Dusen wrote:Der Schlüssel heißt übrigens wider Erwarten nicht ParseDirs, sondern tatsächlich ParceDirs. ...
Interessant - in der mitgelieferten script.ini steht Parsedirs ...

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
van Dusen
Power Member
Power Member
Posts: 684
Joined: 2004-09-16, 19:30 UTC
Location: Sinzig (Rhein), Germany

Post by *van Dusen »

Peter wrote:Interessant - in der mitgelieferten script.ini steht Parsedirs ...
Danke für den Hinweis, habe dadurch bemerkt, dass ich noch die alte Version 0.1 des Plugins in Gebrauch hatte.
"ParceDirs" gilt nur für V0.1, mit Version 0.1.0.1 wurde das geändert und heißt seitdem korrekt "ParseDirs"

Sorry für die Verwirrung!
User avatar
Peter
Power Member
Power Member
Posts: 2068
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Kein Problem.

Gute Nacht.

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
van Dusen
Power Member
Power Member
Posts: 684
Joined: 2004-09-16, 19:30 UTC
Location: Sinzig (Rhein), Germany

Post by *van Dusen »

van Dusen wrote:LongName=1
Es werden lange Dateinamen an das Plugin übergeben.

LongName=0
Mit "Longname=0" dürften wohl die kurzen 8.3-Dateinamen an das Plugin übergeben werden
Und leider ist auch dies falsch, wie ich eben festgestellt habe :oops: . Richtig dürfte vielmehr sein:

LongName=1
Es werden absolute Dateipfade (LW:\Pfad\...\Dateiname) an das Plugin übergeben.

LongName=0
Es werden nur Dateinamen ohne den Pfad an das Plugin übergeben.


Ich hatte seinerzeit nicht bemerkt, dass eine Änderung dieses Schlüssels wohl erst nach einem TC-Neustart wirksam wird (Verzeichniswechsel reicht nicht), was zu meiner falschen Interpretation der Ergebnisse führte.
Post Reply