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