@echo off
setlocal EnableExtensions EnableDelayedExpansion
title Markdown und HTML ablegen, PDF erzeugen

rem ============================================================
rem  md-konvertieren.bat   (risse.net, Netzwerkadmin linuxfreund)
rem
rem  Nimmt die Dateien, die der Markdown-Editor mit "Speichern
rem  md + html" in den Downloads ablegt, und
rem    1. erzeugt aus der HTML-Datei ein PDF (Edge oder Chrome),
rem    2. legt .md in Dokumente\Markdown-Dokumente ab, .html im Unterordner
rem       HTML und .pdf im Unterordner PDF,
rem    3. raeumt die Downloads auf (Quelldateien kommen in den
rem       Unterordner "erledigt", sie werden nicht geloescht).
rem  Doppelversionen wie "Name (1).md" werden erkannt, die
rem  hoechste Nummer gewinnt.
rem
rem  Aufruf: Doppelklick, oder mit einem anderen Quellordner:
rem          md-konvertieren.bat "D:\Eingang"
rem ============================================================

rem ---------- Einstellungen (hier anpassen) ----------
set "QUELLE=%USERPROFILE%\Downloads"
set "ZIELNAME=Markdown-Dokumente"
set "HTML_ABLEGEN=1"
set "PDF_ERZEUGEN=1"
rem ---------------------------------------------------

if not "%~1"=="" set "QUELLE=%~1"
if "!QUELLE:~-1!"=="\" set "QUELLE=!QUELLE:~0,-1!"

rem Ordner "Dokumente" ermitteln (beruecksichtigt OneDrive-Umleitung)
set "DOKUMENTE="
for /f "usebackq delims=" %%i in (`powershell -NoProfile -Command "[Environment]::GetFolderPath('MyDocuments')" 2^>nul`) do set "DOKUMENTE=%%i"
if not defined DOKUMENTE set "DOKUMENTE=%USERPROFILE%\Documents"
set "ZIEL=%DOKUMENTE%\%ZIELNAME%"
set "ERLEDIGT=%QUELLE%\erledigt"
set "ZHTML=%ZIEL%\HTML"
set "ZPDF=%ZIEL%\PDF"

rem Browser fuer die PDF-Erzeugung suchen
set "BROWSER="
for %%p in (
  "%ProgramFiles(x86)%\Microsoft\Edge\Application\msedge.exe"
  "%ProgramFiles%\Microsoft\Edge\Application\msedge.exe"
  "%ProgramFiles%\Google\Chrome\Application\chrome.exe"
  "%ProgramFiles(x86)%\Google\Chrome\Application\chrome.exe"
  "%LocalAppData%\Google\Chrome\Application\chrome.exe"
) do if not defined BROWSER if exist %%p set "BROWSER=%%~p"

echo.
echo ============================================================
echo   Markdown und HTML ablegen, PDF erzeugen
echo ============================================================
echo   Quelle : !QUELLE!
echo   Ziel   : !ZIEL!   (Unterordner HTML und PDF)
if defined BROWSER (echo   Browser: !BROWSER!) else echo   Browser: nicht gefunden - es wird kein PDF erzeugt
echo.

if not exist "!QUELLE!\" (
  echo FEHLER: Der Quellordner existiert nicht.
  goto :ende
)
if not exist "!ZIEL!" mkdir "!ZIEL!"
if not exist "!ZIEL!" (
  echo FEHLER: Der Zielordner kann nicht angelegt werden.
  goto :ende
)

set "LISTE=%TEMP%\md-konvertieren-%RANDOM%.txt"
type nul > "%LISTE%"
set "ANZAHL=0"
set "OK=0"

for /f "delims=" %%F in ('dir /b /a-d "!QUELLE!\*.md" 2^>nul') do (
  set "NAME=%%~nF"
  call :basis
  findstr /x /l /c:"!BASIS!" "%LISTE%" >nul 2>&1
  if errorlevel 1 (
    >>"%LISTE%" echo !BASIS!
    set /a ANZAHL+=1
    call :verarbeiten
  )
)

del "%LISTE%" >nul 2>&1

if %ANZAHL% equ 0 (
  echo Keine Markdown-Dateien in !QUELLE! gefunden.
  echo Speichere im Editor mit "Speichern md + html" und starte dann erneut.
  goto :ende
)

echo.
echo ============================================================
echo   Fertig: !OK! von %ANZAHL% Dokument(en) abgelegt in
echo   !ZIEL!
echo ============================================================
if !OK! gtr 0 start "" explorer "!ZIEL!"
goto :ende

rem ------------------------------------------------------------
:basis
rem Entfernt eine Endung " (1)" bis " (9)" vom Dateinamen
set "BASIS=!NAME!"
for %%V in (1 2 3 4 5 6 7 8 9) do if "!NAME:~-4!"==" (%%V)" set "BASIS=!NAME:~0,-4!"
exit /b

rem ------------------------------------------------------------
:verarbeiten
echo ------------------------------------------------------------
echo Dokument: !BASIS!
set "MD="
set "HTML="
for /L %%V in (9,-1,1) do (
  if not defined MD if exist "!QUELLE!\!BASIS! (%%V).md" set "MD=!QUELLE!\!BASIS! (%%V).md"
  if not defined HTML if exist "!QUELLE!\!BASIS! (%%V).html" set "HTML=!QUELLE!\!BASIS! (%%V).html"
)
if not defined MD if exist "!QUELLE!\!BASIS!.md" set "MD=!QUELLE!\!BASIS!.md"
if not defined HTML if exist "!QUELLE!\!BASIS!.html" set "HTML=!QUELLE!\!BASIS!.html"

if not defined MD (
  echo   FEHLER: keine Markdown-Datei gefunden.
  exit /b
)
if not defined HTML (
  if "%HTML_ABLEGEN%%PDF_ERZEUGEN%" neq "00" (
    echo   FEHLER: keine passende HTML-Datei. Speichere im Editor mit "md + html".
    exit /b
  )
)

set "PDF=!ZPDF!\!BASIS!.pdf"
if "%PDF_ERZEUGEN%"=="1" if defined BROWSER (
  if not exist "!ZPDF!" mkdir "!ZPDF!"
  if exist "!PDF!" del /q "!PDF!" >nul 2>&1
  echo   Erzeuge PDF ...
  "!BROWSER!" --headless --disable-gpu --no-pdf-header-footer --print-to-pdf="!PDF!" "!HTML!" >nul 2>&1
  for /L %%t in (1,1,15) do if not exist "!PDF!" timeout /t 1 /nobreak >nul
  if not exist "!PDF!" (
    echo   FEHLER: PDF konnte nicht erstellt werden. Quelldateien bleiben erhalten.
    exit /b
  )
)

copy /y "!MD!" "!ZIEL!\!BASIS!.md" >nul
if errorlevel 1 (
  echo   FEHLER: Markdown konnte nicht kopiert werden. Quelldateien bleiben erhalten.
  exit /b
)
if "%HTML_ABLEGEN%"=="1" (
  if not exist "!ZHTML!" mkdir "!ZHTML!"
  copy /y "!HTML!" "!ZHTML!\!BASIS!.html" >nul
  if errorlevel 1 (
    echo   FEHLER: HTML konnte nicht kopiert werden. Quelldateien bleiben erhalten.
    exit /b
  )
)

echo   Abgelegt: !BASIS!.md
if "%HTML_ABLEGEN%"=="1" echo             HTML\!BASIS!.html
if exist "!PDF!" echo             PDF\!BASIS!.pdf

rem Erst jetzt die Quelldateien in "erledigt" verschieben
if not exist "!ERLEDIGT!" mkdir "!ERLEDIGT!"
for %%E in (md html) do (
  if exist "!QUELLE!\!BASIS!.%%E" move /y "!QUELLE!\!BASIS!.%%E" "!ERLEDIGT!\" >nul
  for /L %%V in (1,1,9) do if exist "!QUELLE!\!BASIS! (%%V).%%E" move /y "!QUELLE!\!BASIS! (%%V).%%E" "!ERLEDIGT!\" >nul
)
set /a OK+=1
exit /b

:ende
echo.
echo Dieses Fenster schliesst sich in 15 Sekunden. Beliebige Taste beendet es sofort.
timeout /t 15 >nul
endlocal
