Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Skript erstellen das Dateinamen ausliest und als Link in HTML-Datei einfügt

Frage Entwicklung Batch & Shell

Mitglied: Polofahrer

Polofahrer (Level 1) - Jetzt verbinden

22.03.2007, aktualisiert 29.04.2007, 6963 Aufrufe, 11 Kommentare

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 im
01.
<body>
eine Liste mit den links und den Thumbnails der anzuzeigenden Bilder enthalten:
01.
  
02.
 
03.
<a href="./600x800/Dateiname1.jpg" rel="lightbox[GV]; target="  
04.
style="text-decoration: none;"><img src="./Thumbnails/Dateiname1.jpg"  
05.
alt="Dateiname1.jpg" border="0" height="150" width="150" /> 
06.
 
07.
<a href="./600x800/Dateiname2.jpg" rel="lightbox[GV]; target=" 
08.
 style="text-decoration: none;"><img src="./Thumbnails/Dateiname2.jpg"  
09.
alt="Dateiname2.jpg" border="0" height="150" width="150" />  
10.
 
11.
und so weiter
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...
Mitglied: bastla
22.03.2007 um 08:01 Uhr
Hallo Polofahrer und willkommen im Forum!

Versuch es einmal damit:
01.
@echo off & setlocal 
02.
set "source=600x800" 
03.
set "source2=Thumbnails" 
04.
set "target=rumpf.txt" 
05.
echo ^<body^>>%target% 
06.
echo.>>%target% 
07.
for /f "delims=" %%i in ('dir %source%\*.jpg /on /b') do call :ProcessLine "%%i" 
08.
echo ^<body^>>>%target% 
09.
goto :eof 
10.
:ProcessLine 
11.
echo ^<a href="./%source%/%~1" rel="lightbox[GV]; target=">>%target%  
12.
echo style="text-decoration: none;"^>^<img src="./%source2%/%~1">>%target%  
13.
echo alt="%~1" border="0" height="150" width="150" /^>>>%target% 
14.
echo.>>%target%
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
01.
copy kopf.txt + rumpf.txt + fuss.txt index.html
zusammengefügt werden.

HTH
bastla

[Edit] Hinweise auf Verwendung als "rumpf.txt" hinzugefügt. [/Edit]
Bitte warten ..
Mitglied: miniversum
22.03.2007 um 08:22 Uhr
ungestestet würd ich es so machen:
01.
@echo off & enabledelayedexpansion 
02.
set outfile="links.html" 
03.
set "bigdir=600x800" 
04.
set "smalldir=Thumbnails" 
05.
<b>if exist %outfile% del %outfile%</b> 
06.
 
07.
for /f "delims=" %%i in ('dir %bigdir% /b|find ".jpg"') do ( 
08.
 
09.
echo ^<a href="./%bigdir%/%%i" rel="lightbox[GV]; target=" >>%outfile% 
10.
echo style="text-decoration: none;"^>^<img src="./%smalldir%/%%i" >>%outfile% 
11.
echo alt="%%i" border="0" height="150" width="150" /^> >>%outfile% 
12.
echo. 
13.
14.
 
15.
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
Bitte warten ..
Mitglied: bastla
22.03.2007 um 08:27 Uhr
@miniversum

da war woll wer schneller
Wahrscheinlich nicht; nur früher ...

Grüße
bastla
Bitte warten ..
Mitglied: miniversum
22.03.2007 um 08:31 Uhr
naja ... als ich angefangen hab war noch keine Antwort da... also doch schneller
ich sollte mich von den Studentinnen hier nicht so ablenken lassen glaube ich :D

naja zwei gleiche Antworten sind besser wie keine...

miniversum
Bitte warten ..
Mitglied: bastla
22.03.2007 um 08:36 Uhr
@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).
Bitte warten ..
Mitglied: miniversum
22.03.2007 um 08:42 Uhr
danke ist korrigiert...

miniversum
Bitte warten ..
Mitglied: Polofahrer
28.04.2007 um 00:29 Uhr
Zunächst mal Vielen Dank für die schnellen Antworten.

Ich habe das Skript von bastla verwendet und es funktioniert super!
Mein Problem: Leider werden die Fotos nach Namen sortiert und nicht nach Aufnahmedatum.

Jetzt habe ich von einem Bekannten noch weitere Fotos bekommen, die mit einer anderen Kamera aufgenommen wurden und daher eine unterschiedliche Dateibenennung aufweisen. Meine Kamera produziert Dateinamen wie "IMG_2746.JPG" und seine Kamera solche wie "dscf1895.jpg".
Kopiert man diese Fotos in ein gemeinsames Verzeichnis (z.B. slideshow) und wendet das Skript an, dann werden die Dateinamen nach dem Namen sortiert in die index.html eingeschrieben.
Diese Reihenfolge entspricht aber nicht der Aufnahmezeit, folglich werden Fotos, die erst Tage später aufgenommen wurden vor denen angezeigt, die zuerst aufgenommen wurden, so wie die Dateinamen zufälligerweise benannt sind.
Gibt es eine Möglichkeit, das Aufnahmedatum auszulesen und die Dateinamen nach der Aufnahmezeit sortiert in die index.html zu schreiben?

Mit Windows XP kann man eine solche Sortierung problemlos erreichen, wenn man die Detail-Ansicht verwendet und mit dem Kontextmenü in der Menüleiste den Menüpunkt "Bild aufgenommen am" auswählt. Könnte das weiterhelfen?

Vielen Dank im Voraus
Grüße vom Polofahrer

P.S.: hier nochmal das Skript:

01.
@echo off & setlocal 
02.
set "source=600x800" 
03.
set "source2=Thumbnails" 
04.
set "target=rumpf.txt" 
05.
echo ^<body^>>%target% 
06.
echo.>>%target% 
07.
for /f "delims=" %%i in ('dir %source%\*.jpg /on /b') do call :ProcessLine "%%i" 
08.
echo ^<body^>>>%target% 
09.
goto :eof 
10.
:ProcessLine 
11.
echo ^<a href="./%source%/%~1" rel="lightbox[GV]; target=">>%target%  
12.
echo style="text-decoration: none;"^>^<img src="./%source2%/%~1">>%target%  
13.
echo alt="%~1" border="0" height="150" width="150" /^>>>%target% 
14.
echo.>>%target% 
Bitte warten ..
Mitglied: Biber
28.04.2007 um 09:10 Uhr
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
Bitte warten ..
Mitglied: bastla
28.04.2007 um 10:21 Uhr
Hallo Polofahrer!

Um eine um das Aufnahmedatum erweiterte "Bilder-Liste" lt Biber's Vorschlag zu erzeugen, könntest Du vorweg das folgende VBScript einsetzen:
01.
'BilderlisteMitAufnahmedatum.vbs 
02.
'Argument: Voller Pfad (inkl. Laufwerksangabe oder UNC) des Foto-Ordners 
03.
ArgOK = True 
04.
If WScript.Arguments.Count = 0 Then 
05.
	ArgOK = False 
06.
Else 
07.
	If Mid(WScript.Arguments(0), 2, 1) <> ":" And Left(WScript.Arguments(0), 2) <> "\\" Then 
08.
		ArgOK = False 
09.
	Else 
10.
		Set fso = CreateObject("Scripting.FileSystemObject") 
11.
		If Not fso.FolderExists(WScript.Arguments(0)) Then ArgOK = False 
12.
	End If 
13.
End If 
14.
If Not ArgOK Then 
15.
	WScript.Echo "Aufruf mit voller Pfadangabe des Foto-Ordners!" 
16.
	WScript.Quit(1) 
17.
Else 
18.
	Set objShell = CreateObject("Shell.Application") 
19.
	Set objFolder = objShell.Namespace(WScript.Arguments(0)) 
20.
	For Each strFileName in objFolder.Items 
21.
		WScript.Echo objFolder.GetDetailsOf(strFileName, 25) & "_" & strFileName 
22.
	Next 
23.
End If
Falls Du das Script zB unter "C:\Scripts\BilderlisteMitAufnahmedatum.vbs" speicherst, könntest Du zum Starten die folgende Batchdatei ("ErstelleBilderliste.bat") verwenden:
01.
@cscript //nologo "C:\Scripts\BilderlisteMitAufnahmedatum.vbs" "%~1" | sort > "D:\Bilderliste.txt"
Diese Batchdatei kannst Du entweder mit dem vollen Pfad des Foto-Ordners von Hand aufrufen, also etwa
01.
ErstelleBilderliste.bat "D:\Aktuelle Bilder 2007\April"
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:
01.
@echo off & setlocal 
02.
<b>set "liste=D:\Bilderliste.txt"</b> 
03.
set "source=600x800" 
04.
set "source2=Thumbnails" 
05.
set "target=rumpf.txt" 
06.
echo ^<body^>>%target% 
07.
echo.>>%target% 
08.
<b>for /f "tokens=1* delims=_" %%i in ('type %liste%') do call :ProcessLine "%%j"</b> 
09.
echo ^</body^>>>%target% 
10.
goto :eof 
11.
:ProcessLine 
12.
echo ^<a href="./%source%/%~1" rel="lightbox[GV]; target=">>%target%  
13.
echo style="text-decoration: none;"^>^<img src="./%source2%/%~1">>%target%  
14.
echo alt="%~1" border="0" height="150" width="150" /^>>>%target% 
15.
echo.>>%target%
Grüße
bastla
Bitte warten ..
Mitglied: Polofahrer
28.04.2007 um 21:19 Uhr
Was soll ich sagen? Ihr seid spitze!
Allein hätte ich das nicht geschafft.
Vielen Dank an Bastla, Miniversum und Biber dass Ihr euch Zeit für mein Projekt genommen habt!
Bitte warten ..
Mitglied: Biber
29.04.2007 um 18:36 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst PS-Skript anhand Dateinamen und zusätzlich Dateityp (Mapping) verschieben (2)

Frage von cleverm zum Thema Batch & Shell ...

Batch & Shell
gelöst In Html-Datei per Batchdatei das Datum und die Uhrzeit eintragen (2)

Frage von Hakiegold zum Thema Batch & Shell ...

Linux
gelöst URL und Username aus HTML-Datei extrahieren - sed, grep (4)

Frage von plutowitsch zum Thema Linux ...

HTML
gelöst Mit HTML Datei eine Textdatei auslesen (7)

Frage von Maffi zum Thema HTML ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...