Stapelverarbeitung – Wie konvertiert man viele Dateinamen in HTML-Code?

Stapelverarbeitung – Wie konvertiert man viele Dateinamen in HTML-Code?

Ich habe einen Ordner mit PDF-Dateien mit Namen wie

page_1_excercise_2.pdf
page_23_excercise_3_4_and_5.pdf
page_456_excercise_16_and_17.pdf

Die Zahlen können 1, 2 oder 3 Ziffern enthalten. Ich muss HTML-Code wie diesen generieren:

<a href="pdfs/page_1_excercise_2.pdf">Page 1, Excercise 2</a>
<a href="pdfs/page_23_excercise_3_4_and_5.pdf">Page 23, Excercise 3, 4 and 5</a>
<a href="pdfs/page_456_excercise_16_and_17.pdf">Page 456, Excercise 16 and 17</a>

Gibt es eine Möglichkeit, dies mithilfe einer Batchdatei in Windows zu tun?

Folgendes konnte ich bisher herausfinden:

@echo off
Setlocal EnableDelayedExpansion

for /f "tokens=*" %%i in ('dir /b /a:-d *.pdf') do (
set filename=%%i
set filename=!filename:.pdf=!
set filename=!filename:_= !
echo ^<a href="pdfs/%%i"^>!filename!^</a^> >> files.html)

Das funktioniert gut, aber ich möchte nach jeder Übungsnummer ein Komma hinzufügen und den ersten Buchstaben (wie „P“ in „Seite 456…“) in einen Großbuchstaben umwandeln.

Antwort1

@echo off && setlocal enableextensions enabledelayedexpansion

cd /d "%~dp0" && for %%i in ("%cd%")do set "_dir=%%~nxi"
set "_alf=A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"

>.\Output.html (
    findstr /be ^<.*^> "%~f0"
    for /f tokens^=1-7*delims^=_ %%i in ('where .:*.pdf')do (
         call %:^) "%%~ni" "%%~k" _str_1 _str_2 "%_alf%" && if "%%~xl" == ".pdf" (
         echo;^<a href="%_dir%/%%~ni_%%~j_%%~k_%%~nxl"^>!_str_1! %%~j, !_str_2! %%~nl^</a^>
        )else if "%%~xn" == ".pdf" (
         echo;^<a href="%_dir%/%%~ni_%%~j_%%~k_%%~l_%%~m_%%~nxn"^>!_str_1! %%~j, !_str_2! %%~l %%~m %%~nn^</a^>
        )else if "%%~xo" == ".pdf" (
         echo;^<a href="%_dir%/%%~ni_%%~j_%%~k_%%~l_%%~m_%%~n_%%~nxo"^>!_str_1! %%~j, !_str_2! %%~l, %%~m %%~n %%~no^</a^>
        )
    ) 
    echo\^</body^>&echo\^</html^>) & endlocal & goto :eof

%:^)
set "_str#1=%~1" && set "_str#2=%~2" && for %%i in (%~5)do (
     if /i "!_str#1:~0,1!" == "%%~i" set "%~3=%%~i!_str#1:~1!"
     if /i "!_str#2:~0,1!" == "%%~i" set "%~4=%%~i!_str#2:~1!"
    )

exit /b

<!doctype html>
<html>
<head>
<title>Our Funky HTML Page</title>
<meta name="description" content="Our first page">
<meta name="keywords" content="html tutorial template">
</head>
<body>

  • HTML-Dateiausgabe:
<!doctype html>
<html>
<head>
<title>Our Funky HTML Page</title>
<meta name="description" content="Our first page">
<meta name="keywords" content="html tutorial template">
</head>
<body>
<a href="Q1728787/page_1_excercise_2.pdf">Page 1, Excercise 2</a>
<a href="Q1728787/page_23_excercise_3_4_and_5.pdf">Page 23, Excercise 3, 4 and 5</a>
<a href="Q1728787/page_456_excercise_16_and_17.pdf">Page 456, Excercise 16 and 17</a>
</body>
</html>

1.Geben Sie den Ordner ein, in dem Sie die PDF-Dateien haben, oder führen Sie bat in demselben Ordner aus:

cd /d "%~dp0" 
:: or 
cd /d "D:\Full\Path\To\Your\PDFs\Folder"

2.Nur den aktuellen Ordnernamen abrufen und in der Variable speichern:

for %%i in ("%cd%")do set "_dir=%%~nxi"

3.Definiert eine Variable mit Großbuchstaben, um sie in einer fordurch Kommas getrennten Schleife zu verwenden:

set "_alf=A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"

4.Block zur Weiterleitung von Zeichenfolgen in HTML-Dateien:

>.\Output.html (
        ...
        ...
       )

5.Fügen Sie die erforderlichen HTML-Tags am Anfang jeder Zeile und nach der letzten Zeile Ihres Bat hinzu und findstr /Begin /End <one or more characters>filtern Sie sie mithilfe von in Ihre HTML-Datei:

...

findstr /be ^<.*^> "%~f0"

...

<!doctype html>
<html>
<head>
<title>Our Funky HTML Page</title>
<meta name="description" content="Our first page">
<meta name="keywords" content="html tutorial template">
</head>
<body>

6.Verwenden Sie als Befehl eine for /fSchleife, die nur die Dateien in Ihrem Ordner auflistet, und verwenden Sie als Trennzeichen eine _Zahl tokenszwischen 1 und 8 1-7*:

  for /f tokens^=1-7*delims^=_ %%i in ('where .:*.pdf')do ...

7.Verwenden Sie einen , ifum die Aktionen für jedes mögliche Token zu vergleichen, dessen Dateierweiterung Sie haben und die mit oder ohne Komma mit der Zusammensetzung der Zeichenfolge übereinstimmt:

....)do ...  && if "%%~xl" == ".pdf" (
          echo  ...
        )else if "%%~xn" == ".pdf" (
          echo  ...
        )else if "%%~xo" == ".pdf" (
          echo  ...
        )

8.Für alle Fälle, in denen die Erweiterung gleich ist .pdf, behandeln Sie die Zeichenfolgen innerhalb einer Funktion, um den ersten Buchstaben durch einen Großbuchstaben zu ersetzen und übernehmen Sie bereits Ihre Token und deren Namen für jede Variable, in der Sie die Zeichenfolgen speichern, um Ihre gewünschte Ausgabe zusammenzustellen:

...)do call %:^) "%%~ni" "%%~k" _str_1 _str_2 "%_alf%" && if ... (
         echo;^<a href="%_dir%/%%~ni_%%~j_%%~k_%%~nxl"^>!_str_1! %%~j, !_str_2! %%~nl^</a^>
        )else if ... (
         echo;^<a href="%_dir%/%%~ni_%%~j_%%~k_%%~l_%%~m_%%~nxn"^>!_str_1! %%~j, !_str_2! %%~l %%~m %%~nn^</a^>
        )else if ... (
         echo;^<a href="%_dir%/%%~ni_%%~j_%%~k_%%~l_%%~m_%%~n_%%~nxo"^>!_str_1! %%~j, !_str_2! %%~l, %%~m %%~n %%~no^</a^>
        )

9.Übernehmen Sie Ihre Zeichenfolge zusammen mit der Alphabetvariablen in Großbuchstaben in eine Funktion page, wo in einer Schleife das Ersetzen des ersten Zeichens, das mit „true“ auf den insessiven Fall bei der Verwendung von übereinstimmt, die Teilzeichenfolge mit „replace“ ausführt:excercise_alfif /i


...)do call %:^) "%%~ni" "%%~k" _str_1 _str_2 "%_alf%" ... (
     ....
     )

%:^)
set "_str#1=%~1" && set "_str#2=%~2" && for %%i in (%~5)do (
     if /i "!_str#1:~0,1!" == "%%~i" set "%~3=%%~i!_str#1:~1!"
     if /i "!_str#2:~0,1!" == "%%~i" set "%~4=%%~i!_str#2:~1!"
    )
...


Zusätzliche Ressourcen:

verwandte Informationen