2
tuska
Hi, ich hatte noch keine Zeit (Lust) hier weiter zumachen, habe sonst noch Sachen zu erledigen,... habe es aber vor zu tun
- - -
Woher kommt den das von dir gepostete (angepasste?) Skript? Von dir?
Code: Select all
'==============================================================================
'Script for WinScriptAdv content plugin
'
'Bearbeitete Fotodateien selektieren
'https://ghisler.ch/board/viewtopic.php?f=2&t=39683
' content = vBearbeitetJN
' content1 = vPath
' content2 = vFile
' content3 = vFileAendDat
' content4 = vAufnahmeDat
'==============================================================================
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")
content = vBearbeitetJN
content1 = vPath
content2 = vFile
content3 = vFileAendDat
content4 = vAufnahmeDat
Set FSO = Nothing
vFile = fso.GetFileName(filename)
vPath = Left(filename, Len(filename) - Len(vFile))
Set objFolder = objShell.NameSpace(vPath)
Set objFoto = objFolder.ParseName(vFile)
'For i = 0 To 30
' vAllDetails = vAllDetails & CStr(i) & " " & objFolder.GetDetailsOf(objFoto, i) & " • "
'Next
'content = vAllDetails
'*** Dateiänderungsdatum. Rückgabewert wird im Format "TT.MM.JJJJ hh:mm" angezeigt
vFileAendDat = objFolder.GetDetailsOf(objFoto, 3)
vFileAendDat = Mid(vFileAendDat, 7, 4) & "-" & Mid(vFileAendDat, 4, 2) & "-" & Mid(vFileAendDat, 1, 2) & " " & Mid(vFileAendDat, 12, 2) & ":" & Mid(vFileAendDat, 15, 2)
'*** Aufnahmedatum. Rückgabewert wird im Format "?TT.?MM.?JJJJ ??hh:mm" angezeigt ("?" lassen sich nicht mit Replace() entfernen)
vAufnahmeDat = objFolder.GetDetailsOf(objFoto, 12)
If vAufnahmeDat <> "" Then
vAufnahmeDat = Mid(vAufnahmeDat, 10, 4) & "-" & Mid(vAufnahmeDat, 6, 2) & "-" & Mid(vAufnahmeDat, 2, 2) & " " & Mid(vAufnahmeDat, 17, 2) & ":" & Mid(vAufnahmeDat, 20, 2)
End If
If vAufnahmeDat = "" Then
vBearbeitetJN = "nicht ermittelbar"
ElseIf vFileAendDat > vAufnahmeDat Then
vBearbeitetJN = "J"
Else
vBearbeitetJN = "N"
End If
Hier ein paar Anmerkungen dazu:
So ein Skript wird von oben nach unten abgearbeitet.
(Mal GoTo-Befehle und Aufrufe von weiter unten stehenden Funktionen am Anfang ausgenommen,
aber selbst da geht es von oben nach unten)
- zum arbeiten mit dem Dateisystem wird (bei VBS und JS) das "FileSystemObject" benötigt.
Mit >>Set fso = CreateObject("Scripting.FileSystemObject")<<
wird das Objekt geladen und in der Variable "FSO" gespeichert,
um später mittels dem SO erstellten Keyword auf das FileSystemObject zugreifen zu können. (>>fso.GetFileName()<<)
Mittels >>Set FSO = Nothing<< wird die Variable Namens FSO wieder freigegeben (Speicherbereiningung RAM)
Es macht also keinen Sinn, diesen Befehl so weit oben, noch vor der Verwendung, zu benutzen.
Diese Zeile gehört ans Ende des Skripts (oder zB einer Funktion, je nachdem...)
Andererseits wird der Speicher nach Beendigung des Skript sowieso automatisch wieder freigegeben.
Dieses Aufräumen macht (heutzutage) wahrscheinlich nur dann Sinn, wenn man in einem seeehr
langem Skript mit mehreren Funktionen, in vielen Funktionen solch ein Objekt einbindet
und so das Objekt mehrmals lädt, und das Skript auch noch längere Zeit läuft. Dann kann man
das Objekt auch mal freigeben. Vor zwnzig Jahren, mit 1GB RAM sah das anders aus.
- die Variablen Namens "content" halten am Ende den gewünschten Inhalt, das Ergebnis des Skripts.
Wenn diese Vars am Anfang, noch vor der Ermittlung des Ergebnisses, gefüllt werden (>>content1 = vPath<<), so enthalten sie nichts.
>>content1 = vPath<< gehört also unter die Zeile >>vPath = Left. . . .<<, oder ganz ans Ende,
aber meistens gleich nach der Ermittlung, sodass alles beisammen ist.
EDIT:
um dich komplett zu verwirren, wird im Skript "MinutesAgo.vbs" die "content"-Variablen tatsächlich bereits am Anfang gefüllt.
Allerdings werden sie durch den Aufruf einer Funktion Namesn "Result" (>>content = Result(filename, 1)<<) gefüllt.
Hierbei wird der Code unten in der Funktion ausgeführt, und das Ergenis in die Variable geschrieben.
Wenn du das verstehst, siehst du dann auch, dass das Skript auch hier von oben nach unten arbeitet.
das wars erstmal, weiter habe ich das skript nicht überprüft
- - -
Nachtrag (allgemeine Info, nicht speziell an dich, nur weil's mir 'grad aufgefallen ist):
Noch ein Unterschied zwischen beiden Plugins:
Beim "Script Content Plugin 0.2.0.2" wird der Inhalt der Skript-Variablen "
content"
bei der Verwendung im TC mittels der Variablen "
Result" angezeigt:
--- Im Skript "content=xyz" .- - - - - - - - - -> in TC [=script.Result]
--- Im Skript "content1=MyResult" .- - - - - -> in TC [=script.Result1]
--- Im Skript "content2=ResultOfFunction" -> in TC [=script.Result2]
Beim "WinScript Advanced"-Plugin wird der Inhalt der Skript-Variablen "
content"
bei der Verwendung im TC mittels Variablen angezeigt, welche
ihren Namen in der options.ini erhalten haben:
--- Im Skript "content = vBearbeitetJN" -> in options.ini "content=SpalteEins" - -- -> in TC [=winscriptsadv.SpalteEins]
--- Im Skript "content1 = vPath" - - - - - -> in options.ini "content1=ZweiteSpalte" -> in TC [=winscriptsadv.ZweiteSpalte]
--- Im Skript "content2 = vFile" - - - - - -> in options.ini "content2=Drittens" -- - - -> in TC [=winscriptsadv.Drittens]
- - -
Anmerkung zur "WinScript Advanced"-Plugin "options.ini"
Leerzeichen finde ich nicht so geschickt:
>>content = vBearbeitetJN<<
Besser
>>content=vBearbeitetJN<<
Vielleicht stört's nicht, vielleicht doch?
Andere, nicht verwendete [Sektionen] würde ich erstmal raus löschen, um andere eventuelle Störer zu vermeiden.
Und/Oder auch die >>ActiveScripts=<< - Zeile würde ich aufräumen, und nur das gerade aktuelle Skript stehenlassen.
Wenn DAS funktioniert, kannst du das Rausgeschmissene wieder einfügen.
- - -
"WinScript Advanced"-Plugin >> options.ini"-BEISPIEL (Auszug)
[Script]
ActiveScripts=MinutesAgo|Signature|GetDetailsOf
[GetDetailsOf]
Script=GetDetailsOf.vbs
content=vBearbeitetJN
content1=vPath
content2=vFile
content3=vFileAendDat
content4=vAufnahmeDat
extensions=*
FoldersPaths=0