Export PDF und STEP

🧩 Syntax:
@echo off
setlocal enabledelayedexpansion

:: === Debug-Log ===
set "DEBUGLOG=C:\Users\PROCADADM\debug_log.txt"
echo === Debug-Log gestartet am %date% %time% === > "%DEBUGLOG%"

:: === Eingaben ===
set "INPUTFILE=\\shdata1\MS-Direc\Einkauf_Zeichnungen\Materialnummern.txt"
set "SERVER=SHCOM3"
set "DATABASE=profile"
set "OUTPUT=C:\Users\PROCADADM\dokumenten_ids.txt"
set "PDFSOURCE=\\shcad2\D$\prodata\CAD"
set "DEST=C:\Users\PROCADADM\Gefundene_Dateien"

echo [INFO] Startet Prozess...
echo [INFO] Startet Prozess... >> "%DEBUGLOG%"
echo.

:: === Zielordner vorbereiten ===
if exist "%DEST%\PDFs" rmdir /S /Q "%DEST%\PDFs"
if exist "%DEST%\STPs" rmdir /S /Q "%DEST%\STPs"
if exist "%DEST%\tmp" rmdir /S /Q "%DEST%\tmp"

mkdir "%DEST%\PDFs"
mkdir "%DEST%\STPs"
mkdir "%DEST%\tmp"

:: === Materialnummern in kommaseparierte Liste packen ===
echo [INFO] Materialnummern werden aus %INPUTFILE% gelesen...
echo [INFO] Materialnummern werden aus %INPUTFILE% gelesen... >> "%DEBUGLOG%"
set "MATLIST="
for /f "usebackq delims=" %%a in ("%INPUTFILE%") do (
    set "MAT=%%a"
    if defined MATLIST (
        set "MATLIST=!MATLIST!,'!MAT!'"
    ) else (
        set "MATLIST='!MAT!'"
    )
)
echo [INFO] Fertig. Materialnummern-Liste: !MATLIST!
echo [INFO] Fertig. Materialnummern-Liste: !MATLIST! >> "%DEBUGLOG%"
echo.

:: === SQL-Abfrage ausführen ===
echo [INFO] Starte SQL-Abfrage...
echo [INFO] Starte SQL-Abfrage... >> "%DEBUGLOG%"
sqlcmd -S %SERVER% -d %DATABASE% -E -h -1 -W -Q "SET NOCOUNT ON; SELECT v.DV_VSTL25, v.DV_IDNR FROM dbo.DOKVAR v JOIN dbo.DOKSTAMM s ON v.DV_IDNR = s.DO_IDNR WHERE v.DV_VSTL25 IN (!MATLIST!) AND s.DO_EXT IN ('pdf','stp');" -o "%OUTPUT%"

echo [INFO] SQL-Abfrage abgeschlossen. Ergebnisse in: %OUTPUT%
echo [INFO] SQL-Abfrage abgeschlossen. Ergebnisse in: %OUTPUT% >> "%DEBUGLOG%"
echo.

echo ===============================================
echo Inhalt von %OUTPUT%
echo ===============================================
type "%OUTPUT%"
type "%OUTPUT%" >> "%DEBUGLOG%"
echo ===============================================
echo.

pause   :: --- Erste Pause: SQL-Ausgabe prüfen

:: === Alle PDFs und STPs auflisten in lokalem TMP-Ordner ===
dir /b /s "%PDFSOURCE%\*.pdf" > "%DEST%\tmp\all_pdfs.txt"
dir /b /s "%PDFSOURCE%\*.stp" > "%DEST%\tmp\all_stps.txt"

:: === Dateien suchen und kopieren ===
echo [INFO] Suche nach passenden Dateien anhand der DOCIDs...
echo [INFO] Suche nach passenden Dateien anhand der DOCIDs... >> "%DEBUGLOG%"

for /f "tokens=1,2" %%a in (%OUTPUT%) do (
    set "MATNR=%%a"
    set "DOCID="
    if "%%b" NEQ "" set "DOCID=%%b"
    set "FOUND=0"

    echo [DEBUG] Bearbeite Materialnummer=!MATNR! mit DOCID=!DOCID!
    echo [DEBUG] Bearbeite Materialnummer=!MATNR! mit DOCID=!DOCID! >> "%DEBUGLOG%"

    :: Wenn keine DOCID vorhanden ist, überspringen
    if not defined DOCID (
        echo [WARN] Keine DOCID vorhanden für !MATNR! → Überspringe...
        echo [WARN] Keine DOCID vorhanden für !MATNR! → Überspringe... >> "%DEBUGLOG%"
        goto :continueLoop
    )

    :: === PDF-Dateien ===
    for /f "delims=" %%f in ('findstr /i "\\!DOCID!.pdf$" "%DEST%\tmp\all_pdfs.txt"') do (
        set "FNAME=%%~nxf"
        if /i "!FNAME!"=="!DOCID!.pdf" (
            copy /Y "%%f" "%DEST%\PDFs\!MATNR!.pdf" >nul
            set "FOUND=1"
        )
    )

    :: === STP-Dateien ===
    for /f "delims=" %%f in ('findstr /i "\\!DOCID!.stp$" "%DEST%\tmp\all_stps.txt"') do (
        set "FNAME=%%~nxf"
        if /i "!FNAME!"=="!DOCID!.stp" (
            copy /Y "%%f" "%DEST%\STPs\!MATNR!.stp" >nul
            set "FOUND=1"
        )
    )

    if !FOUND! EQU 0 (
        echo [WARN] Keine Datei gefunden für DOCID !DOCID! (Materialnummer !MATNR!)
        echo [WARN] Keine Datei gefunden für DOCID !DOCID! (Materialnummer !MATNR!) >> "%DEBUGLOG%"
    )

    :continueLoop
)

pause   :: --- Zweite Pause: letzte Kontrolle vor Aufräumen

:: === Aufräumen ===
if exist "%OUTPUT%" del "%OUTPUT%"
if exist "%DEST%\tmp" rmdir /S /Q "%DEST%\tmp"
type nul > "%INPUTFILE%"

:: === Marker auf Server setzen ===
echo done > "%DEST%\EXPORT_DONE.txt"

:: === Dateien auf Netzwerk kopieren ===
robocopy "%DEST%" "\\shdata1\MS-Direc\Einkauf_Zeichnungen\Gefundene_Dateien" /E /Z

:: === Lokalen Ordner löschen ===
rmdir /S /Q "%DEST%"

echo [INFO] Export abgeschlossen.
echo [INFO] Export abgeschlossen. >> "%DEBUGLOG%"

pause   :: --- Letzte Pause, damit Fenster offen bleibt
exit