Skript erstellen das Dateinamen ausliest und als Link in HTML-Datei einfügt
Ich möchte für eine FotoCD die Dateinamen von Bildern aus einem Verzeichnis auslesen und als link in eine vorgefertigte HTML-Datei einfügen (dabei wird ein platzhalter überschrieben).
Hallo Zusammen!
Ich habe jetzt einige zeit nach einer Lösung für mein Problem gegoogelt. Ich konnte zwar herausfinden, wie man dateinamen ausliest, jedoch nicht, wie man sie formatiert in eine Datei schreiben kann. Zum Ablauf meines kleinen Skripts:
1) Dateinamen im Verzeichnis auslesen,
z. B. mit "for /f "tokens=1,2,4" %%i in ('dir *.txt^|find /i ".txt"')" ich weiß jedoch nicht, wie man das in eine vorgefertigte Datei schreibt...
2) Die Datei "index.html" soll imeine Liste mit den links und den Thumbnails der anzuzeigenden Bilder enthalten:
Dazu habe ich vorher zwei Verzeichnisse mit den jeweils gleichnamigen Bildern erstellt: Ordner "600x400" mit den anzuzeigenden Bildern und Ordner "Thumbnails" mit den kleinen Vorschaubildchen.
Bis auf die Liste mit den Links liegt die Datei "index.html" fertig programmiert im selben Verzeichnis wie auch das Skript liegen soll.
Das Skript muss daher nur noch den oben angegebenen Code mit den Dateinamen aus den Unterordnern versehen und zusammen der Reihe nach in die index.html einfügen.
Weiß da jemand Rat? Da ich für einen Verein häufig FotoCDs mit über 300 Bildern erstellen muss, wäre mir die copy-und-paste-Variante zu zeitaufwendig...
Hallo Zusammen!
Ich habe jetzt einige zeit nach einer Lösung für mein Problem gegoogelt. Ich konnte zwar herausfinden, wie man dateinamen ausliest, jedoch nicht, wie man sie formatiert in eine Datei schreiben kann. Zum Ablauf meines kleinen Skripts:
1) Dateinamen im Verzeichnis auslesen,
z. B. mit "for /f "tokens=1,2,4" %%i in ('dir *.txt^|find /i ".txt"')" ich weiß jedoch nicht, wie man das in eine vorgefertigte Datei schreibt...
2) Die Datei "index.html" soll im
<body>
<a href="./600x800/Dateiname1.jpg" rel="lightbox[GV]; target="
style="text-decoration: none;"><img src="./Thumbnails/Dateiname1.jpg"
alt="Dateiname1.jpg" border="0" height="150" width="150" />
<a href="./600x800/Dateiname2.jpg" rel="lightbox[GV]; target="
style="text-decoration: none;"><img src="./Thumbnails/Dateiname2.jpg"
alt="Dateiname2.jpg" border="0" height="150" width="150" />
und so weiter
Bis auf die Liste mit den Links liegt die Datei "index.html" fertig programmiert im selben Verzeichnis wie auch das Skript liegen soll.
Das Skript muss daher nur noch den oben angegebenen Code mit den Dateinamen aus den Unterordnern versehen und zusammen der Reihe nach in die index.html einfügen.
Weiß da jemand Rat? Da ich für einen Verein häufig FotoCDs mit über 300 Bildern erstellen muss, wäre mir die copy-und-paste-Variante zu zeitaufwendig...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 54723
Url: https://administrator.de/forum/skript-erstellen-das-dateinamen-ausliest-und-als-link-in-html-datei-einfuegt-54723.html
Ausgedruckt am: 22.04.2025 um 02:04 Uhr
11 Kommentare
Neuester Kommentar
Hallo Polofahrer und willkommen im Forum!
Versuch es einmal damit:
Die Verzeichnisangaben entsprechen Deiner Vorlage. Sollte statt "600x800" doch "600x400" benötigt werden, einfach die entsprechende "set"-Zeile ändern.
Erstellt wird zunächst eine "rumpf.txt", die Du in den Rest der Seite einfügen kannst (siehe auch unten).
Welche Tags (zB "body", ...) geschrieben werden sollen, kannst Du in (weiteren) "echo"-Zeilen festlegen. Bitte beachten: In der allerersten "echo"-Zeile steht nur ">%target%", in allen weiteren ">>%target%" - dadurch wird die Zieldatei immer wieder neu erstellt.
Alle vor bzw nach der erstellten Liste noch benötigten html-Teile könnten in einer "kopf.txt" und einer "fuss.txt" gespeichert werden und mit einem
zusammengefügt werden.
HTH
bastla
[Edit] Hinweise auf Verwendung als "rumpf.txt" hinzugefügt. [/Edit]
Versuch es einmal damit:
@echo off & setlocal
set "source=600x800"
set "source2=Thumbnails"
set "target=rumpf.txt"
echo ^<body^>>%target%
echo.>>%target%
for /f "delims=" %%i in ('dir %source%\*.jpg /on /b') do call :ProcessLine "%%i"
echo ^<body^>>>%target%
goto :eof
:ProcessLine
echo ^<a href="./%source%/%~1" rel="lightbox[GV]; target=">>%target%
echo style="text-decoration: none;"^>^<img src="./%source2%/%~1">>%target%
echo alt="%~1" border="0" height="150" width="150" /^>>>%target%
echo.>>%target%
Erstellt wird zunächst eine "rumpf.txt", die Du in den Rest der Seite einfügen kannst (siehe auch unten).
Welche Tags (zB "body", ...) geschrieben werden sollen, kannst Du in (weiteren) "echo"-Zeilen festlegen. Bitte beachten: In der allerersten "echo"-Zeile steht nur ">%target%", in allen weiteren ">>%target%" - dadurch wird die Zieldatei immer wieder neu erstellt.
Alle vor bzw nach der erstellten Liste noch benötigten html-Teile könnten in einer "kopf.txt" und einer "fuss.txt" gespeichert werden und mit einem
copy kopf.txt + rumpf.txt + fuss.txt index.html
HTH
bastla
[Edit] Hinweise auf Verwendung als "rumpf.txt" hinzugefügt. [/Edit]
ungestestet würd ich es so machen:
Hier wird eine Datei namens "links.html" neu erstellt und dann die links entsprechend den Dateien im Verzeichnis "600x800" eingefügt. Das die gleichnamigen Dateien im Verzeichnis "Thumbnails" existieren wird vorausgesetzt.
Willst du das diese links in deine "index.html" hinzugefügt werden, könntest du diese auch angeben. dann must du allerdings die fett gedruckte zeile löschen da diese sonst deine vorhandene "index.html" sonst zuvor löscht. Die links werden allerdings nur am ende angehängt. Brauchst du die links in der mitte der datei müstest du wie das "echo ^</html^> >>%outfile%" am ende der rest drangehängt werden.
miniversum
PS: ups da war woll wer schneller
@echo off & enabledelayedexpansion
set outfile="links.html"
set "bigdir=600x800"
set "smalldir=Thumbnails"
<b>if exist %outfile% del %outfile%</b>
for /f "delims=" %%i in ('dir %bigdir% /b|find ".jpg"') do (
echo ^<a href="./%bigdir%/%%i" rel="lightbox[GV]; target=" >>%outfile%
echo style="text-decoration: none;"^>^<img src="./%smalldir%/%%i" >>%outfile%
echo alt="%%i" border="0" height="150" width="150" /^> >>%outfile%
echo.
)
echo ^</html^> >>%outfile%
Hier wird eine Datei namens "links.html" neu erstellt und dann die links entsprechend den Dateien im Verzeichnis "600x800" eingefügt. Das die gleichnamigen Dateien im Verzeichnis "Thumbnails" existieren wird vorausgesetzt.
Willst du das diese links in deine "index.html" hinzugefügt werden, könntest du diese auch angeben. dann must du allerdings die fett gedruckte zeile löschen da diese sonst deine vorhandene "index.html" sonst zuvor löscht. Die links werden allerdings nur am ende angehängt. Brauchst du die links in der mitte der datei müstest du wie das "echo ^</html^> >>%outfile%" am ende der rest drangehängt werden.
miniversum
PS: ups da war woll wer schneller
@miniversum
Allerdings: Wen von uns wird man wohl beneiden (den "Schnellen" oder den "Abgelenkten")? 8-)
Grüße
bastla
P.S.: Wenn Du in einem Codeblock fett schreiben möchtest, musst Du html-Tags verwenden (also < b> bzw < /b> ohne Leerstellen).
Allerdings: Wen von uns wird man wohl beneiden (den "Schnellen" oder den "Abgelenkten")? 8-)
Grüße
bastla
P.S.: Wenn Du in einem Codeblock fett schreiben möchtest, musst Du html-Tags verwenden (also < b> bzw < /b> ohne Leerstellen).
Moin Polofahrer,
es gibt wie immer im Leben mehrere mögliche Strategien, mit dieser neuen Situation umzugehen.
Die Sortierung ist ja in bastlas Lösung "nach Name" durch den Dir-Parameter /on entstanden
(in dem Part "'dir %source%\*.jpg /on /b'").
Ein erster Schritt der Annäherung wäre, statt mit /on mit /od nach Datum Sortieren zu lassen.
Eine weitere Variante wäre, die Sortierung der Bilderganz unabhängig von diesem Mini-Batch festzulegen und aus einer "Bilder-Liste" zu lesen statt den DIR-Befehl zu benutzen.
Diese "Bilder-Liste" wäre nur eine simple Text-Datei mit je einem Bild/Dateinamen pro Zeile.
Und von daher per Skript erzeugbar und auch von Hand bearbeitbar.
Dann hättest Du wenigstens auch die Möglichkeit, von einem starren "nach Namen" oder "nach Datum"-Sortieren wieder wegzukommen.
Das Aufnahmedatum lässt sich mit VBSkript sicherlich auch auslesen - aber passt nicht das "normale" Datei-Datum?
Gruss
Biber
es gibt wie immer im Leben mehrere mögliche Strategien, mit dieser neuen Situation umzugehen.
Die Sortierung ist ja in bastlas Lösung "nach Name" durch den Dir-Parameter /on entstanden
(in dem Part "'dir %source%\*.jpg /on /b'").
Ein erster Schritt der Annäherung wäre, statt mit /on mit /od nach Datum Sortieren zu lassen.
Eine weitere Variante wäre, die Sortierung der Bilderganz unabhängig von diesem Mini-Batch festzulegen und aus einer "Bilder-Liste" zu lesen statt den DIR-Befehl zu benutzen.
Diese "Bilder-Liste" wäre nur eine simple Text-Datei mit je einem Bild/Dateinamen pro Zeile.
Und von daher per Skript erzeugbar und auch von Hand bearbeitbar.
Dann hättest Du wenigstens auch die Möglichkeit, von einem starren "nach Namen" oder "nach Datum"-Sortieren wieder wegzukommen.
Das Aufnahmedatum lässt sich mit VBSkript sicherlich auch auslesen - aber passt nicht das "normale" Datei-Datum?
Gruss
Biber
Hallo Polofahrer!
Um eine um das Aufnahmedatum erweiterte "Bilder-Liste" lt Biber's Vorschlag zu erzeugen, könntest Du vorweg das folgende VBScript einsetzen:
Falls Du das Script zB unter "C:\Scripts\BilderlisteMitAufnahmedatum.vbs" speicherst, könntest Du zum Starten die folgende Batchdatei ("ErstelleBilderliste.bat") verwenden:
Diese Batchdatei kannst Du entweder mit dem vollen Pfad des Foto-Ordners von Hand aufrufen, also etwa
oder einfach den entsprechenden Ordner auf die Batchdatei ziehen.
Als Ergebnis erhältst Du eine nach dem Aufnahmedatum sortierte Bilderliste in "D:\Bilderliste.txt" (falls anderer Pfad/Name der Liste gewünscht, dann auch in der folgenden Batchdatei anpassen), welche Du, wie vorgeschlagen, im Editor nach Wunsch noch weiter ordnen kannst.
Die fertige Liste verarbeiten könntest Du dann in weiterer Folge mit dieser etwas veränderten Version der Batchdatei:
Grüße
bastla
Um eine um das Aufnahmedatum erweiterte "Bilder-Liste" lt Biber's Vorschlag zu erzeugen, könntest Du vorweg das folgende VBScript einsetzen:
'BilderlisteMitAufnahmedatum.vbs
'Argument: Voller Pfad (inkl. Laufwerksangabe oder UNC) des Foto-Ordners
ArgOK = True
If WScript.Arguments.Count = 0 Then
ArgOK = False
Else
If Mid(WScript.Arguments(0), 2, 1) <> ":" And Left(WScript.Arguments(0), 2) <> "\\" Then
ArgOK = False
Else
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(WScript.Arguments(0)) Then ArgOK = False
End If
End If
If Not ArgOK Then
WScript.Echo "Aufruf mit voller Pfadangabe des Foto-Ordners!"
WScript.Quit(1)
Else
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(WScript.Arguments(0))
For Each strFileName in objFolder.Items
WScript.Echo objFolder.GetDetailsOf(strFileName, 25) & "_" & strFileName
Next
End If
@cscript //nologo "C:\Scripts\BilderlisteMitAufnahmedatum.vbs" "%~1" | sort > "D:\Bilderliste.txt"
ErstelleBilderliste.bat "D:\Aktuelle Bilder 2007\April"
Als Ergebnis erhältst Du eine nach dem Aufnahmedatum sortierte Bilderliste in "D:\Bilderliste.txt" (falls anderer Pfad/Name der Liste gewünscht, dann auch in der folgenden Batchdatei anpassen), welche Du, wie vorgeschlagen, im Editor nach Wunsch noch weiter ordnen kannst.
Die fertige Liste verarbeiten könntest Du dann in weiterer Folge mit dieser etwas veränderten Version der Batchdatei:
@echo off & setlocal
<b>set "liste=D:\Bilderliste.txt"</b>
set "source=600x800"
set "source2=Thumbnails"
set "target=rumpf.txt"
echo ^<body^>>%target%
echo.>>%target%
<b>for /f "tokens=1* delims=_" %%i in ('type %liste%') do call :ProcessLine "%%j"</b>
echo ^</body^>>>%target%
goto :eof
:ProcessLine
echo ^<a href="./%source%/%~1" rel="lightbox[GV]; target=">>%target%
echo style="text-decoration: none;"^>^<img src="./%source2%/%~1">>%target%
echo alt="%~1" border="0" height="150" width="150" /^>>>%target%
echo.>>%target%
Grüße
bastla
Moin Polofahrer,
machen wir jederzeit gerne wieder.
Bitte setze beim nächsten Mal (beim Skripten gibt es immer ein nächstes Mal) Deinen Beitrag auf "Gelöst", wenn die gestellte Frage nach Deinem Bauchgefühl soweit beantwortet ist, dass Du erstmal wieder weitermachen kannst.
Dieses "Auf-Gelöst-Setzen" ist für mich als Mod das Signal, dass dieser Beitrag geschlossen werden kann.
Dieses Mal mache ich das beides.
Grüße
Biber
machen wir jederzeit gerne wieder.
Bitte setze beim nächsten Mal (beim Skripten gibt es immer ein nächstes Mal) Deinen Beitrag auf "Gelöst", wenn die gestellte Frage nach Deinem Bauchgefühl soweit beantwortet ist, dass Du erstmal wieder weitermachen kannst.
Dieses "Auf-Gelöst-Setzen" ist für mich als Mod das Signal, dass dieser Beitrag geschlossen werden kann.
Dieses Mal mache ich das beides.
Grüße
Biber