Batch Grundkurs 010: Fehlende Dateien in zwei Ordnern vergleichen
Worum geht es in diesem Teil?
In diesem zehnten Teil des Batch-Grundkurses vergleichen wir zwei Ordner miteinander und ermitteln, welche Dateien jeweils im anderen Ordner fehlen.
Das ist besonders praktisch, wenn man kontrollieren möchte, ob zwei Ordner denselben Dateibestand enthalten oder ob bestimmte Dateien noch fehlen.
Beispiel:
Ordner 1:
Bild_001.CR3
Bild_002.CR3
Bild_003.CR3
Ordner 2:
Bild_001.JPG
Bild_003.JPG
Bild_004.JPG
Wenn ohne Dateierweiterung verglichen wird, erkennt das Skript:
Bild_002 fehlt in Ordner 2.
Bild_004 fehlt in Ordner 1.
Damit eignet sich dieses Skript zum Beispiel sehr gut für RAW/JPG-Vergleiche, Exportkontrollen oder Projektabgleiche.
Warum ist dieses Beispiel praktisch?
Beim Arbeiten mit Dateien kommt es häufig vor, dass zwei Ordner miteinander verglichen werden müssen.
Typische Anwendungsfälle:
RAW-Dateien mit JPG-Exporten vergleichen
Originaldateien mit bearbeiteten Exporten vergleichen
Scanordner mit sortiertem Zielordner vergleichen
Projektordner mit Kontrollordner vergleichen
lokale Dateien mit Backup- oder Exportordner vergleichen
fehlende Dateien vor einer Archivierung finden
Das Skript prüft dabei nicht nur eine Richtung, sondern beide Richtungen:
- Welche Dateien aus Ordner 1 fehlen in Ordner 2?
- Welche Dateien aus Ordner 2 fehlen in Ordner 1?
Hinweis zur Kursreihe
Dieses Skript-Paket ist Teil einer größeren Vergleichsreihe. Die Aufgabe wird zuerst mit Batch umgesetzt. Später folgen passende Varianten mit PowerShell 7 und Python, damit man die unterschiedlichen Lösungswege direkt miteinander vergleichen kann.
Batch = einfacher Einstieg mit Windows-Bordmitteln
PowerShell 7 = moderner und leistungsfähiger für Windows-Automatisierung
Python = sehr flexibel und auch für größere Tools geeignet
Downloads zu diesem Teil
Für diesen Teil gibt es zwei Downloads: die Batchdateien für diesen Kursteil und die gemeinsame Testumgebung für die Windows-Automatisierung.
Batchdateien für Teil 010:
Download Batch Grundkurs: 010_Fehlende_Dateien_vergleichen als ZIP Datei
Entpacken nach:
C:\TOPTORIALS_CODE\000_Batch_Grundkurs
Falls der Ordner noch nicht existiert, lege ihn vorher im Explorer an. Nach dem Entpacken entsteht dort automatisch:
C:\TOPTORIALS_CODE\000_Batch_Grundkurs\010_Fehlende_Dateien_vergleichen
Testumgebung für Windows-Automatisierung:
Download TOPTORIALS_Testdaten_Windows_Automatisierung_V001.zip
Entpacken nach:
C:\TOPTORIALS_CODE\1000_TESTBEREICH
Für den Batch-Grundkurs benenne den entpackten Ordner anschließend um in:
TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001
Testumgebung zum Mitmachen
Die Testumgebung enthält vorbereitete Ordner und Beispieldateien für die einzelnen Teile des Kurses. Damit kannst du die Batchdateien gefahrlos ausprobieren, ohne eigene wichtige Dateien verwenden zu müssen.
Die Testumgebung ist sprachübergreifend aufgebaut. Das bedeutet: Die gleiche Grundstruktur kann später auch für die passenden PowerShell-7- und Python-Versionen verwendet werden. Für den Batch-Grundkurs arbeiten wir mit einer eigenen Kopie des Testdatenordners.
Nach dem Entpacken und Umbenennen sieht der Pfad zum Testdatenordner für den Batch-Grundkurs zum Beispiel so aus:
C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001
Für diesen Teil verwendest du dann den passenden Unterordner:
C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen
Für die Variante mit festen Ordnern liegen die beiden Vergleichsordner zum Beispiel hier:
C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen\01_Feste_Ordner_vergleichen\01_Ordner_1
C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen\01_Feste_Ordner_vergleichen\02_Ordner_2
Für die SendTo-Variante kannst du zum Beispiel diese beiden Ordner markieren und an das Skript senden:
C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen\02_SendTo_Zwei_Ordner_vergleichen\Ordner_A
C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen\02_SendTo_Zwei_Ordner_vergleichen\Ordner_B
Du musst die Testumgebung aber nicht verwenden. Die Batchdateien funktionieren auch mit eigenen Ordnern. Wichtig ist nur, dass du zuerst mit Testdaten arbeitest und nicht direkt mit wichtigen Originaldateien.
Sicherheitshinweis
Wichtiger Hinweis:
Die Skripte werden auf eigene Verantwortung verwendet. Teste jedes Skript zuerst in einem separaten Testordner und niemals direkt mit wichtigen Originaldateien. Einige Skripte können Dateien umbenennen, verschieben oder neue Dateien und Ordner erstellen. Lies die Hinweise auf der jeweiligen Seite sorgfältig durch und verwende zuerst immer den Testmodus, wenn ein Skript eine _test-Version enthält.
Dieses Skript-Paket ist vergleichsweise sicher, weil keine vorhandenen Dateien gelöscht, verschoben oder umbenannt werden. Die Skripte vergleichen nur Dateinamen und erstellen Ergebnisdateien beziehungsweise kopieren eine Zusammenfassung in die Zwischenablage.
Enthaltene Skripte
Zu diesem Teil gehören vier Batchdateien:
010_fehlende_dateien_vergleichen_test.bat
010_fehlende_dateien_vergleichen.bat
010_sendto_zwei_ordner_vergleichen_test.bat
010_sendto_zwei_ordner_vergleichen.bat
Welche Variante brauche ich?
- Feste Ordner im Testmodus: Wenn zwei festgelegte Unterordner verglichen werden sollen und nur eine Vorschau benötigt wird.
- Feste Ordner mit Ergebnisdatei: Wenn zwei festgelegte Unterordner verglichen und das Ergebnis gespeichert werden soll.
- SendTo-Testvariante: Wenn genau zwei Ordner im Explorer markiert und per Rechtsklick verglichen werden sollen, zunächst nur als Vorschau.
- SendTo-Variante: Wenn genau zwei Ordner per Rechtsklick verglichen und Ergebnisdateien geschrieben werden sollen.
Vergleich mit oder ohne Dateierweiterung
Beim Start fragt das Skript, ob die Dateierweiterung beim Vergleich berücksichtigt werden soll.
Vergleich mit Dateierweiterung
Dann wird der komplette Dateiname verglichen.
Rechnung.pdf
ist dann nicht gleich:
Rechnung.docx
Diese Variante ist sinnvoll, wenn wirklich exakt gleiche Dateinamen inklusive Dateiendung erwartet werden.
Vergleich ohne Dateierweiterung
Dann wird nur der Name ohne Dateiendung verglichen.
Bild_001.CR3
wird dann als passend erkannt zu:
Bild_001.JPG
Diese Variante ist besonders nützlich für RAW/JPG-Vergleiche oder Exportkontrollen.
Variante 1: Zwei feste Ordner vergleichen im Testmodus
Die Datei heißt:
010_fehlende_dateien_vergleichen_test.bat
Diese Variante arbeitet mit zwei festen Unterordnern. In der Testumgebung sind das:
01_Ordner_1
02_Ordner_2
Das Skript vergleicht beide Ordner in beide Richtungen und zeigt an, welche Dateien jeweils fehlen.
Der komplette Code der festen Testvariante
@echo off
REM ============================================================
REM TOPTORIALS OFFICE - Batch Grundkurs
REM Script: 010_fehlende_dateien_vergleichen_test.bat
REM Beschreibung: Vergleicht zwei feste Ordner und listet fehlende Dateien auf.
REM Autor: Chris
REM YouTube: https://www.youtube.com/@TOPTORIALS-OFFICE
REM Webseite: https://www.toptorials.com
REM Version: 1.0
REM Stand: 2026-06-27
REM
REM Hinweis:
REM Solange _test im Dateinamen steht, wird nur eine Vorschau angezeigt.
REM Fuer die echte Ausfuehrung _test aus dem Dateinamen entfernen.
REM ============================================================
echo.
setlocal enabledelayedexpansion
set "TESTMODUS=NEIN"
set "ORDNER_1=C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen\01_Feste_Ordner_vergleichen\01_Ordner_1"
set "ORDNER_2=C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen\01_Feste_Ordner_vergleichen\02_Ordner_2"
set "DATUM=%date:~-4%-%date:~3,2%-%date:~0,2%"
set "ZEIT=%time:~0,2%-%time:~3,2%-%time:~6,2%"
set "ZEIT=%ZEIT: =0%"
set "ZEITSTEMPEL=%DATUM%_%ZEIT%"
set "AUSGABEDATEI=vergleich_ergebnis_%ZEITSTEMPEL%.txt"
set /a FEHLT_IN_ORDNER_1=0
set /a FEHLT_IN_ORDNER_2=0
set /a ANZAHL_ORDNER_1=0
set /a ANZAHL_ORDNER_2=0
echo %~n0 | find /i "_test" >nul
if not errorlevel 1 set "TESTMODUS=JA"
echo Zwei Ordner werden miteinander verglichen...
echo.
echo Ordner 1:
echo %ORDNER_1%
echo.
echo Ordner 2:
echo %ORDNER_2%
echo.
echo Ergebnisdatei:
echo %AUSGABEDATEI%
echo.
echo Testmodus: %TESTMODUS%
echo.
if not exist "%ORDNER_1%\" (
echo Ordner 1 wurde nicht gefunden:
echo %ORDNER_1%
echo.
pause
exit /b
)
if not exist "%ORDNER_2%\" (
echo Ordner 2 wurde nicht gefunden:
echo %ORDNER_2%
echo.
pause
exit /b
)
echo Soll die Dateierweiterung beim Vergleich beruecksichtigt werden?
echo.
echo JA = kompletter Dateiname wird verglichen, z.B. Datei.pdf
echo NEIN = nur der Name ohne Erweiterung wird verglichen, z.B. Datei
echo.
set /p "MIT_ENDUNG=Dateierweiterung beruecksichtigen? JA/NEIN: "
if /i "%MIT_ENDUNG%"=="JA" goto vergleich_start
if /i "%MIT_ENDUNG%"=="NEIN" goto vergleich_start
echo.
echo Ungueltige Eingabe.
echo Bitte JA oder NEIN eingeben.
echo.
pause
exit /b
:vergleich_start
echo.
echo Vergleich startet...
echo.
if "%TESTMODUS%"=="NEIN" (
echo Vergleich von "%ORDNER_1%" und "%ORDNER_2%">>"%AUSGABEDATEI%"
echo Dateierweiterung beruecksichtigen: %MIT_ENDUNG%>>"%AUSGABEDATEI%"
echo.>>"%AUSGABEDATEI%"
)
echo Dateien aus "%ORDNER_1%" werden in "%ORDNER_2%" gesucht...
echo.
if "%TESTMODUS%"=="NEIN" (
echo Dateien aus "%ORDNER_1%", die in "%ORDNER_2%" fehlen:>>"%AUSGABEDATEI%"
)
for %%f in ("%ORDNER_1%\*.*") do (
if exist "%%~f" (
set /a ANZAHL_ORDNER_1+=1
if /i "%MIT_ENDUNG%"=="JA" (
set "SUCHNAME=%%~nxf"
if exist "%ORDNER_2%\!SUCHNAME!" (
rem Datei wurde gefunden
) else (
echo FEHLT IN %ORDNER_2%: "!SUCHNAME!"
if "%TESTMODUS%"=="NEIN" echo FEHLT: "!SUCHNAME!">>"%AUSGABEDATEI%"
set /a FEHLT_IN_ORDNER_2+=1
)
) else (
set "SUCHNAME=%%~nf"
set "GEFUNDEN=NEIN"
for %%z in ("%ORDNER_2%\!SUCHNAME!.*") do (
if exist "%%~z" set "GEFUNDEN=JA"
)
if "!GEFUNDEN!"=="NEIN" (
echo FEHLT IN %ORDNER_2%: "!SUCHNAME!"
if "%TESTMODUS%"=="NEIN" echo FEHLT: "!SUCHNAME!">>"%AUSGABEDATEI%"
set /a FEHLT_IN_ORDNER_2+=1
)
)
)
)
if "%TESTMODUS%"=="NEIN" echo.>>"%AUSGABEDATEI%"
echo.
echo Dateien aus "%ORDNER_2%" werden in "%ORDNER_1%" gesucht...
echo.
if "%TESTMODUS%"=="NEIN" (
echo Dateien aus "%ORDNER_2%", die in "%ORDNER_1%" fehlen:>>"%AUSGABEDATEI%"
)
for %%f in ("%ORDNER_2%\*.*") do (
if exist "%%~f" (
set /a ANZAHL_ORDNER_2+=1
if /i "%MIT_ENDUNG%"=="JA" (
set "SUCHNAME=%%~nxf"
if exist "%ORDNER_1%\!SUCHNAME!" (
rem Datei wurde gefunden
) else (
echo FEHLT IN %ORDNER_1%: "!SUCHNAME!"
if "%TESTMODUS%"=="NEIN" echo FEHLT: "!SUCHNAME!">>"%AUSGABEDATEI%"
set /a FEHLT_IN_ORDNER_1+=1
)
) else (
set "SUCHNAME=%%~nf"
set "GEFUNDEN=NEIN"
for %%z in ("%ORDNER_1%\!SUCHNAME!.*") do (
if exist "%%~z" set "GEFUNDEN=JA"
)
if "!GEFUNDEN!"=="NEIN" (
echo FEHLT IN %ORDNER_1%: "!SUCHNAME!"
if "%TESTMODUS%"=="NEIN" echo FEHLT: "!SUCHNAME!">>"%AUSGABEDATEI%"
set /a FEHLT_IN_ORDNER_1+=1
)
)
)
)
if "%TESTMODUS%"=="NEIN" (
echo.>>"%AUSGABEDATEI%"
echo Zusammenfassung:>>"%AUSGABEDATEI%"
echo Dateien in %ORDNER_1%: %ANZAHL_ORDNER_1%>>"%AUSGABEDATEI%"
echo Dateien in %ORDNER_2%: %ANZAHL_ORDNER_2%>>"%AUSGABEDATEI%"
echo Fehlen in %ORDNER_1%: %FEHLT_IN_ORDNER_1%>>"%AUSGABEDATEI%"
echo Fehlen in %ORDNER_2%: %FEHLT_IN_ORDNER_2%>>"%AUSGABEDATEI%"
)
echo.
echo Fertig.
echo.
echo Dateien in %ORDNER_1%: %ANZAHL_ORDNER_1%
echo Dateien in %ORDNER_2%: %ANZAHL_ORDNER_2%
echo.
echo Fehlen in %ORDNER_1%: %FEHLT_IN_ORDNER_1%
echo Fehlen in %ORDNER_2%: %FEHLT_IN_ORDNER_2%
echo.
if "%TESTMODUS%"=="JA" (
echo Es wurde noch keine Ergebnisdatei erstellt.
echo Wenn du eine Ergebnisdatei erstellen moechtest, entferne _test aus dem Dateinamen.
) else (
echo Ergebnisdatei wurde erstellt:
echo %AUSGABEDATEI%
)
echo.
pause
Code der festen Testvariante erklärt
Testmodus erkennen
set "TESTMODUS=NEIN"
echo %~n0 | find /i "_test" >nul
if not errorlevel 1 set "TESTMODUS=JA"
Das Skript erkennt den Testmodus über den Dateinamen. Wenn _test im Namen der Batchdatei vorkommt, wird keine Ergebnisdatei geschrieben.
Ordner festlegen
In der festen Variante werden zwei Ordner im Skript definiert. Diese Ordner werden miteinander verglichen.
In der Testumgebung zeigen die festen Pfade auf diese beiden Ordner:
C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen\01_Feste_Ordner_vergleichen\01_Ordner_1
C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen\01_Feste_Ordner_vergleichen\02_Ordner_2
Der Vorteil ist, dass man das Skript einfach starten kann, ohne jedes Mal Ordner auswählen zu müssen.
Abfrage der Dateierweiterung
Beim Start wird abgefragt, ob die Dateierweiterung berücksichtigt werden soll.
Dadurch kann das Skript je nach Anwendungsfall exakt oder nur anhand des Basisnamens vergleichen.
Beide Richtungen vergleichen
Das Skript prüft nicht nur, was in Ordner 2 fehlt, sondern auch, was in Ordner 1 fehlt.
Dadurch entsteht ein vollständiger Vergleich.
Variante 2: Zwei feste Ordner vergleichen mit Ergebnisdatei
Die Datei heißt:
010_fehlende_dateien_vergleichen.bat
Diese Variante arbeitet wie die Testvariante, erstellt aber zusätzlich eine Ergebnisdatei mit Zeitstempel.
Der komplette Code der festen Ergebnisvariante
@echo off
REM ============================================================
REM TOPTORIALS OFFICE - Batch Grundkurs
REM Script: 010_fehlende_dateien_vergleichen_test.bat
REM Beschreibung: Vergleicht zwei feste Ordner und listet fehlende Dateien auf.
REM Autor: Chris
REM YouTube: https://www.youtube.com/@TOPTORIALS-OFFICE
REM Webseite: https://www.toptorials.com
REM Version: 1.0
REM Stand: 2026-06-27
REM
REM Hinweis:
REM Solange _test im Dateinamen steht, wird nur eine Vorschau angezeigt.
REM Fuer die echte Ausfuehrung _test aus dem Dateinamen entfernen.
REM ============================================================
echo.
setlocal enabledelayedexpansion
set "TESTMODUS=NEIN"
set "ORDNER_1=C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen\01_Feste_Ordner_vergleichen\01_Ordner_1"
set "ORDNER_2=C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen\01_Feste_Ordner_vergleichen\02_Ordner_2"
set "DATUM=%date:~-4%-%date:~3,2%-%date:~0,2%"
set "ZEIT=%time:~0,2%-%time:~3,2%-%time:~6,2%"
set "ZEIT=%ZEIT: =0%"
set "ZEITSTEMPEL=%DATUM%_%ZEIT%"
set "AUSGABEDATEI=vergleich_ergebnis_%ZEITSTEMPEL%.txt"
set /a FEHLT_IN_ORDNER_1=0
set /a FEHLT_IN_ORDNER_2=0
set /a ANZAHL_ORDNER_1=0
set /a ANZAHL_ORDNER_2=0
echo %~n0 | find /i "_test" >nul
if not errorlevel 1 set "TESTMODUS=JA"
echo Zwei Ordner werden miteinander verglichen...
echo.
echo Ordner 1:
echo %ORDNER_1%
echo.
echo Ordner 2:
echo %ORDNER_2%
echo.
echo Ergebnisdatei:
echo %AUSGABEDATEI%
echo.
echo Testmodus: %TESTMODUS%
echo.
if not exist "%ORDNER_1%\" (
echo Ordner 1 wurde nicht gefunden:
echo %ORDNER_1%
echo.
pause
exit /b
)
if not exist "%ORDNER_2%\" (
echo Ordner 2 wurde nicht gefunden:
echo %ORDNER_2%
echo.
pause
exit /b
)
echo Soll die Dateierweiterung beim Vergleich beruecksichtigt werden?
echo.
echo JA = kompletter Dateiname wird verglichen, z.B. Datei.pdf
echo NEIN = nur der Name ohne Erweiterung wird verglichen, z.B. Datei
echo.
set /p "MIT_ENDUNG=Dateierweiterung beruecksichtigen? JA/NEIN: "
if /i "%MIT_ENDUNG%"=="JA" goto vergleich_start
if /i "%MIT_ENDUNG%"=="NEIN" goto vergleich_start
echo.
echo Ungueltige Eingabe.
echo Bitte JA oder NEIN eingeben.
echo.
pause
exit /b
:vergleich_start
echo.
echo Vergleich startet...
echo.
if "%TESTMODUS%"=="NEIN" (
echo Vergleich von "%ORDNER_1%" und "%ORDNER_2%">>"%AUSGABEDATEI%"
echo Dateierweiterung beruecksichtigen: %MIT_ENDUNG%>>"%AUSGABEDATEI%"
echo.>>"%AUSGABEDATEI%"
)
echo Dateien aus "%ORDNER_1%" werden in "%ORDNER_2%" gesucht...
echo.
if "%TESTMODUS%"=="NEIN" (
echo Dateien aus "%ORDNER_1%", die in "%ORDNER_2%" fehlen:>>"%AUSGABEDATEI%"
)
for %%f in ("%ORDNER_1%\*.*") do (
if exist "%%~f" (
set /a ANZAHL_ORDNER_1+=1
if /i "%MIT_ENDUNG%"=="JA" (
set "SUCHNAME=%%~nxf"
if exist "%ORDNER_2%\!SUCHNAME!" (
rem Datei wurde gefunden
) else (
echo FEHLT IN %ORDNER_2%: "!SUCHNAME!"
if "%TESTMODUS%"=="NEIN" echo FEHLT: "!SUCHNAME!">>"%AUSGABEDATEI%"
set /a FEHLT_IN_ORDNER_2+=1
)
) else (
set "SUCHNAME=%%~nf"
set "GEFUNDEN=NEIN"
for %%z in ("%ORDNER_2%\!SUCHNAME!.*") do (
if exist "%%~z" set "GEFUNDEN=JA"
)
if "!GEFUNDEN!"=="NEIN" (
echo FEHLT IN %ORDNER_2%: "!SUCHNAME!"
if "%TESTMODUS%"=="NEIN" echo FEHLT: "!SUCHNAME!">>"%AUSGABEDATEI%"
set /a FEHLT_IN_ORDNER_2+=1
)
)
)
)
if "%TESTMODUS%"=="NEIN" echo.>>"%AUSGABEDATEI%"
echo.
echo Dateien aus "%ORDNER_2%" werden in "%ORDNER_1%" gesucht...
echo.
if "%TESTMODUS%"=="NEIN" (
echo Dateien aus "%ORDNER_2%", die in "%ORDNER_1%" fehlen:>>"%AUSGABEDATEI%"
)
for %%f in ("%ORDNER_2%\*.*") do (
if exist "%%~f" (
set /a ANZAHL_ORDNER_2+=1
if /i "%MIT_ENDUNG%"=="JA" (
set "SUCHNAME=%%~nxf"
if exist "%ORDNER_1%\!SUCHNAME!" (
rem Datei wurde gefunden
) else (
echo FEHLT IN %ORDNER_1%: "!SUCHNAME!"
if "%TESTMODUS%"=="NEIN" echo FEHLT: "!SUCHNAME!">>"%AUSGABEDATEI%"
set /a FEHLT_IN_ORDNER_1+=1
)
) else (
set "SUCHNAME=%%~nf"
set "GEFUNDEN=NEIN"
for %%z in ("%ORDNER_1%\!SUCHNAME!.*") do (
if exist "%%~z" set "GEFUNDEN=JA"
)
if "!GEFUNDEN!"=="NEIN" (
echo FEHLT IN %ORDNER_1%: "!SUCHNAME!"
if "%TESTMODUS%"=="NEIN" echo FEHLT: "!SUCHNAME!">>"%AUSGABEDATEI%"
set /a FEHLT_IN_ORDNER_1+=1
)
)
)
)
if "%TESTMODUS%"=="NEIN" (
echo.>>"%AUSGABEDATEI%"
echo Zusammenfassung:>>"%AUSGABEDATEI%"
echo Dateien in %ORDNER_1%: %ANZAHL_ORDNER_1%>>"%AUSGABEDATEI%"
echo Dateien in %ORDNER_2%: %ANZAHL_ORDNER_2%>>"%AUSGABEDATEI%"
echo Fehlen in %ORDNER_1%: %FEHLT_IN_ORDNER_1%>>"%AUSGABEDATEI%"
echo Fehlen in %ORDNER_2%: %FEHLT_IN_ORDNER_2%>>"%AUSGABEDATEI%"
)
echo.
echo Fertig.
echo.
echo Dateien in %ORDNER_1%: %ANZAHL_ORDNER_1%
echo Dateien in %ORDNER_2%: %ANZAHL_ORDNER_2%
echo.
echo Fehlen in %ORDNER_1%: %FEHLT_IN_ORDNER_1%
echo Fehlen in %ORDNER_2%: %FEHLT_IN_ORDNER_2%
echo.
if "%TESTMODUS%"=="JA" (
echo Es wurde noch keine Ergebnisdatei erstellt.
echo Wenn du eine Ergebnisdatei erstellen moechtest, entferne _test aus dem Dateinamen.
) else (
echo Ergebnisdatei wurde erstellt:
echo %AUSGABEDATEI%
)
echo.
pause
Wichtige Unterschiede der festen Ergebnisvariante
Ergebnisdatei mit Zeitstempel
Die Ergebnisdatei enthält einen Zeitstempel im Namen.
Beispiel:
vergleich_ergebnis_2026-06-27_16-42-08.txt
Dadurch können mehrere Vergleichsergebnisse nebeneinander gespeichert werden.
Ausgabe in Datei
Die Ergebnisse werden nicht nur im Fenster angezeigt, sondern auch in eine Textdatei geschrieben.
Das ist praktisch, wenn man die fehlenden Dateien später kontrollieren, weitergeben oder dokumentieren möchte.
Robuste Schreibweise für die Ergebnisdatei
Bei der Ausgabe in die Ergebnisdatei wird die Umleitung bewusst vor den echo-Befehl gesetzt.
>>"%AUSGABEDATEI%" echo Fehlen in %ORDNER_1%: %FEHLT_IN_ORDNER_1%
Diese Schreibweise ist robuster, wenn eine Zeile mit einer Zahl endet. So wird verhindert, dass Batch eine Zahl direkt vor der Umleitung falsch interpretiert.
Variante 3: SendTo-Testvariante für genau zwei Ordner
Die Datei heißt:
010_sendto_zwei_ordner_vergleichen_test.bat
Diese Variante ist für das Windows-Menü Senden an gedacht.
Im Explorer müssen genau zwei Ordner markiert und an das Skript gesendet werden.
Wichtig:
- Es müssen genau zwei Ordner übergeben werden.
- Weniger als zwei Ordner sind nicht erlaubt.
- Mehr als zwei Ordner sind nicht erlaubt.
- Dateien statt Ordnern werden nicht akzeptiert.
Der komplette Code der SendTo-Testvariante
@echo off
REM ============================================================
REM TOPTORIALS OFFICE - Batch Grundkurs
REM Script: 010_sendto_zwei_ordner_vergleichen_test.bat
REM Beschreibung: Vergleicht zwei uebergebene Ordner und listet fehlende Dateien auf.
REM Autor: Chris
REM YouTube: https://www.youtube.com/@TOPTORIALS-OFFICE
REM Webseite: https://www.toptorials.com
REM Version: 1.0
REM Stand: 2026-06-27
REM
REM Hinweis:
REM Solange _test im Dateinamen steht, wird nur eine Vorschau angezeigt.
REM Fuer die echte Ausfuehrung _test aus dem Dateinamen entfernen.
REM ============================================================
echo.
setlocal enabledelayedexpansion
set "TESTMODUS=NEIN"
set /a ANZAHL_ORDNER_1=0
set /a ANZAHL_ORDNER_2=0
set /a FEHLT_IN_ORDNER_1=0
set /a FEHLT_IN_ORDNER_2=0
echo %~n0 | find /i "_test" >nul
if not errorlevel 1 set "TESTMODUS=JA"
set "DATUM=%date:~-4%-%date:~3,2%-%date:~0,2%"
set "ZEIT=%time:~0,2%-%time:~3,2%-%time:~6,2%"
set "ZEIT=%ZEIT: =0%"
set "ZEITSTEMPEL=%DATUM%_%ZEIT%"
set "CLIPDATEI=%TEMP%\vergleich_zwischenablage_%ZEITSTEMPEL%.txt"
if "%~1"=="" goto falsche_anzahl
if "%~2"=="" goto falsche_anzahl
if not "%~3"=="" goto falsche_anzahl
if not exist "%~1\" goto erster_kein_ordner
if not exist "%~2\" goto zweiter_kein_ordner
set "ORDNER_1=%~1"
set "ORDNER_2=%~2"
set "AUSGABE_1=%ORDNER_1%\vergleich_fehlt_hier_%ZEITSTEMPEL%.txt"
set "AUSGABE_2=%ORDNER_2%\vergleich_fehlt_hier_%ZEITSTEMPEL%.txt"
echo Zwei Ordner werden miteinander verglichen...
echo.
echo Ordner 1:
echo %ORDNER_1%
echo.
echo Ordner 2:
echo %ORDNER_2%
echo.
echo Testmodus: %TESTMODUS%
echo.
echo Soll die Dateierweiterung beim Vergleich beruecksichtigt werden?
echo.
echo JA = kompletter Dateiname wird verglichen, z.B. Datei.pdf
echo NEIN = nur der Name ohne Erweiterung wird verglichen, z.B. Datei
echo.
set /p "MIT_ENDUNG=Dateierweiterung beruecksichtigen? JA/NEIN: "
if /i "%MIT_ENDUNG%"=="JA" goto vergleich_start
if /i "%MIT_ENDUNG%"=="NEIN" goto vergleich_start
echo.
echo Ungueltige Eingabe.
echo Bitte JA oder NEIN eingeben.
echo.
pause
exit /b
:vergleich_start
echo.
echo Vergleich startet...
echo.
if exist "%CLIPDATEI%" del "%CLIPDATEI%"
echo Vergleichsergebnis>"%CLIPDATEI%"
echo.>>"%CLIPDATEI%"
echo Ordner 1:>>"%CLIPDATEI%"
echo %ORDNER_1%>>"%CLIPDATEI%"
echo.>>"%CLIPDATEI%"
echo Ordner 2:>>"%CLIPDATEI%"
echo %ORDNER_2%>>"%CLIPDATEI%"
echo.>>"%CLIPDATEI%"
echo Dateierweiterung beruecksichtigen: %MIT_ENDUNG%>>"%CLIPDATEI%"
echo Testmodus: %TESTMODUS%>>"%CLIPDATEI%"
echo.>>"%CLIPDATEI%"
if "%TESTMODUS%"=="NEIN" (
call :kopf_schreiben "%AUSGABE_1%" "%ORDNER_1%" "%ORDNER_2%"
call :kopf_schreiben "%AUSGABE_2%" "%ORDNER_2%" "%ORDNER_1%"
)
echo Dateien aus Ordner 2 werden in Ordner 1 gesucht...
echo.
echo Dateien aus Ordner 2, die in Ordner 1 fehlen:>>"%CLIPDATEI%"
echo.>>"%CLIPDATEI%"
for %%f in ("%ORDNER_2%\*.*") do (
if exist "%%~f" (
set /a ANZAHL_ORDNER_2+=1
if /i "%MIT_ENDUNG%"=="JA" (
set "SUCHNAME=%%~nxf"
if exist "%ORDNER_1%\!SUCHNAME!" (
rem Datei wurde gefunden
) else (
echo FEHLT IN ORDNER 1: "!SUCHNAME!"
echo !SUCHNAME!>>"%CLIPDATEI%"
set /a FEHLT_IN_ORDNER_1+=1
if "%TESTMODUS%"=="NEIN" (
echo !SUCHNAME!>>"%AUSGABE_1%"
)
)
) else (
set "SUCHNAME=%%~nf"
set "GEFUNDEN=NEIN"
for %%z in ("%ORDNER_1%\!SUCHNAME!.*") do (
if exist "%%~z" set "GEFUNDEN=JA"
)
if "!GEFUNDEN!"=="NEIN" (
echo FEHLT IN ORDNER 1: "!SUCHNAME!"
echo !SUCHNAME!>>"%CLIPDATEI%"
set /a FEHLT_IN_ORDNER_1+=1
if "%TESTMODUS%"=="NEIN" (
echo !SUCHNAME!>>"%AUSGABE_1%"
)
)
)
)
)
echo.>>"%CLIPDATEI%"
echo Dateien aus Ordner 1, die in Ordner 2 fehlen:>>"%CLIPDATEI%"
echo.>>"%CLIPDATEI%"
echo.
echo Dateien aus Ordner 1 werden in Ordner 2 gesucht...
echo.
for %%f in ("%ORDNER_1%\*.*") do (
if exist "%%~f" (
set /a ANZAHL_ORDNER_1+=1
if /i "%MIT_ENDUNG%"=="JA" (
set "SUCHNAME=%%~nxf"
if exist "%ORDNER_2%\!SUCHNAME!" (
rem Datei wurde gefunden
) else (
echo FEHLT IN ORDNER 2: "!SUCHNAME!"
echo !SUCHNAME!>>"%CLIPDATEI%"
set /a FEHLT_IN_ORDNER_2+=1
if "%TESTMODUS%"=="NEIN" (
echo !SUCHNAME!>>"%AUSGABE_2%"
)
)
) else (
set "SUCHNAME=%%~nf"
set "GEFUNDEN=NEIN"
for %%z in ("%ORDNER_2%\!SUCHNAME!.*") do (
if exist "%%~z" set "GEFUNDEN=JA"
)
if "!GEFUNDEN!"=="NEIN" (
echo FEHLT IN ORDNER 2: "!SUCHNAME!"
echo !SUCHNAME!>>"%CLIPDATEI%"
set /a FEHLT_IN_ORDNER_2+=1
if "%TESTMODUS%"=="NEIN" (
echo !SUCHNAME!>>"%AUSGABE_2%"
)
)
)
)
)
echo.>>"%CLIPDATEI%"
echo Zusammenfassung:>>"%CLIPDATEI%"
echo Dateien in Ordner 1: %ANZAHL_ORDNER_1%>>"%CLIPDATEI%"
echo Dateien in Ordner 2: %ANZAHL_ORDNER_2%>>"%CLIPDATEI%"
echo Fehlen in Ordner 1: %FEHLT_IN_ORDNER_1%>>"%CLIPDATEI%"
echo Fehlen in Ordner 2: %FEHLT_IN_ORDNER_2%>>"%CLIPDATEI%"
if "%TESTMODUS%"=="NEIN" (
call :zusammenfassung_schreiben "%AUSGABE_1%" "%ORDNER_1%" "%ORDNER_2%" "%ANZAHL_ORDNER_1%" "%ANZAHL_ORDNER_2%" "%FEHLT_IN_ORDNER_1%"
call :zusammenfassung_schreiben "%AUSGABE_2%" "%ORDNER_2%" "%ORDNER_1%" "%ANZAHL_ORDNER_2%" "%ANZAHL_ORDNER_1%" "%FEHLT_IN_ORDNER_2%"
)
type "%CLIPDATEI%" | clip
echo.
echo Fertig.
echo.
echo Dateien in Ordner 1: %ANZAHL_ORDNER_1%
echo Dateien in Ordner 2: %ANZAHL_ORDNER_2%
echo.
echo Fehlen in Ordner 1: %FEHLT_IN_ORDNER_1%
echo Fehlen in Ordner 2: %FEHLT_IN_ORDNER_2%
echo.
echo Die komplette Zusammenfassung wurde in die Zwischenablage kopiert.
echo.
if "%TESTMODUS%"=="JA" (
echo Es wurden noch keine Ergebnisdateien erstellt.
echo Wenn du Ergebnisdateien erstellen moechtest, entferne _test aus dem Dateinamen.
) else (
echo Ergebnisdatei in Ordner 1:
echo %AUSGABE_1%
echo.
echo Ergebnisdatei in Ordner 2:
echo %AUSGABE_2%
)
echo.
pause
exit /b
:kopf_schreiben
set "DATEI=%~1"
set "DIESER_ORDNER=%~2"
set "ANDERER_ORDNER=%~3"
echo Vergleichsergebnis>"%DATEI%"
echo.>>"%DATEI%"
echo Dieser Ordner:>>"%DATEI%"
echo %DIESER_ORDNER%>>"%DATEI%"
echo.>>"%DATEI%"
echo Vergleich mit:>>"%DATEI%"
echo %ANDERER_ORDNER%>>"%DATEI%"
echo.>>"%DATEI%"
echo Dateierweiterung beruecksichtigen: %MIT_ENDUNG%>>"%DATEI%"
echo.>>"%DATEI%"
echo Dateien, die in diesem Ordner fehlen:>>"%DATEI%"
echo.>>"%DATEI%"
exit /b
:zusammenfassung_schreiben
set "DATEI=%~1"
set "DIESER_ORDNER=%~2"
set "ANDERER_ORDNER=%~3"
set "DATEIEN_DIESER_ORDNER=%~4"
set "DATEIEN_ANDERER_ORDNER=%~5"
set "FEHLEN_HIER=%~6"
echo.>>"%DATEI%"
echo Zusammenfassung:>>"%DATEI%"
echo Dateien in diesem Ordner: %DATEIEN_DIESER_ORDNER%>>"%DATEI%"
echo Dateien im Vergleichsordner: %DATEIEN_ANDERER_ORDNER%>>"%DATEI%"
echo Dateien, die hier fehlen: %FEHLEN_HIER%>>"%DATEI%"
echo.>>"%DATEI%"
echo Vergleichsordner:>>"%DATEI%"
echo %ANDERER_ORDNER%>>"%DATEI%"
exit /b
:falsche_anzahl
echo Bitte genau zwei Ordner an dieses Skript senden.
echo.
echo Markiere im Explorer genau zwei Ordner,
echo dann Rechtsklick - Senden an verwenden.
echo.
pause
exit /b
:erster_kein_ordner
echo Der erste uebergebene Pfad ist kein Ordner:
echo %~1
echo.
pause
exit /b
:zweiter_kein_ordner
echo Der zweite uebergebene Pfad ist kein Ordner:
echo %~2
echo.
pause
exit /b
Code der SendTo-Testvariante erklärt
Genau zwei Parameter prüfen
Die SendTo-Variante prüft, ob genau zwei Elemente übergeben wurden.
Dadurch wird verhindert, dass versehentlich zu wenige oder zu viele Ordner verglichen werden.
Prüfen, ob beide Parameter Ordner sind
Beide übergebenen Elemente müssen Ordner sein.
Wenn eines der Elemente kein Ordner ist, bricht das Skript mit einer Meldung ab.
Beide Ordner in beide Richtungen vergleichen
Auch die SendTo-Variante vergleicht beide Richtungen:
- Dateien aus Ordner 1, die in Ordner 2 fehlen
- Dateien aus Ordner 2, die in Ordner 1 fehlen
Variante 4: SendTo-Variante mit Ergebnisdateien und Zwischenablage
Die Datei heißt:
010_sendto_zwei_ordner_vergleichen.bat
Diese Variante erstellt Ergebnisdateien in den übergebenen Ordnern und kopiert zusätzlich die komplette Zusammenfassung in die Zwischenablage.
Der komplette Code der SendTo-Ergebnisvariante
@echo off
REM ============================================================
REM TOPTORIALS OFFICE - Batch Grundkurs
REM Script: 010_sendto_zwei_ordner_vergleichen.bat
REM Beschreibung: Vergleicht zwei uebergebene Ordner und listet fehlende Dateien auf.
REM Autor: Chris
REM YouTube: https://www.youtube.com/@TOPTORIALS-OFFICE
REM Webseite: https://www.toptorials.com
REM Version: 1.0
REM Stand: 2026-06-27
REM
REM Hinweis:
REM Solange _test im Dateinamen steht, wird nur eine Vorschau angezeigt.
REM Fuer die echte Ausfuehrung _test aus dem Dateinamen entfernen.
REM ============================================================
echo.
setlocal enabledelayedexpansion
set "TESTMODUS=NEIN"
set /a ANZAHL_ORDNER_1=0
set /a ANZAHL_ORDNER_2=0
set /a FEHLT_IN_ORDNER_1=0
set /a FEHLT_IN_ORDNER_2=0
echo %~n0 | find /i "_test" >nul
if not errorlevel 1 set "TESTMODUS=JA"
set "DATUM=%date:~-4%-%date:~3,2%-%date:~0,2%"
set "ZEIT=%time:~0,2%-%time:~3,2%-%time:~6,2%"
set "ZEIT=%ZEIT: =0%"
set "ZEITSTEMPEL=%DATUM%_%ZEIT%"
set "CLIPDATEI=%TEMP%\vergleich_zwischenablage_%ZEITSTEMPEL%.txt"
if "%~1"=="" goto falsche_anzahl
if "%~2"=="" goto falsche_anzahl
if not "%~3"=="" goto falsche_anzahl
if not exist "%~1\" goto erster_kein_ordner
if not exist "%~2\" goto zweiter_kein_ordner
set "ORDNER_1=%~1"
set "ORDNER_2=%~2"
set "AUSGABE_1=%ORDNER_1%\vergleich_fehlt_hier_%ZEITSTEMPEL%.txt"
set "AUSGABE_2=%ORDNER_2%\vergleich_fehlt_hier_%ZEITSTEMPEL%.txt"
echo Zwei Ordner werden miteinander verglichen...
echo.
echo Ordner 1:
echo %ORDNER_1%
echo.
echo Ordner 2:
echo %ORDNER_2%
echo.
echo Testmodus: %TESTMODUS%
echo.
echo Soll die Dateierweiterung beim Vergleich beruecksichtigt werden?
echo.
echo JA = kompletter Dateiname wird verglichen, z.B. Datei.pdf
echo NEIN = nur der Name ohne Erweiterung wird verglichen, z.B. Datei
echo.
set /p "MIT_ENDUNG=Dateierweiterung beruecksichtigen? JA/NEIN: "
if /i "%MIT_ENDUNG%"=="JA" goto vergleich_start
if /i "%MIT_ENDUNG%"=="NEIN" goto vergleich_start
echo.
echo Ungueltige Eingabe.
echo Bitte JA oder NEIN eingeben.
echo.
pause
exit /b
:vergleich_start
echo.
echo Vergleich startet...
echo.
if exist "%CLIPDATEI%" del "%CLIPDATEI%"
echo Vergleichsergebnis>"%CLIPDATEI%"
echo.>>"%CLIPDATEI%"
echo Ordner 1:>>"%CLIPDATEI%"
echo %ORDNER_1%>>"%CLIPDATEI%"
echo.>>"%CLIPDATEI%"
echo Ordner 2:>>"%CLIPDATEI%"
echo %ORDNER_2%>>"%CLIPDATEI%"
echo.>>"%CLIPDATEI%"
echo Dateierweiterung beruecksichtigen: %MIT_ENDUNG%>>"%CLIPDATEI%"
echo Testmodus: %TESTMODUS%>>"%CLIPDATEI%"
echo.>>"%CLIPDATEI%"
if "%TESTMODUS%"=="NEIN" (
call :kopf_schreiben "%AUSGABE_1%" "%ORDNER_1%" "%ORDNER_2%"
call :kopf_schreiben "%AUSGABE_2%" "%ORDNER_2%" "%ORDNER_1%"
)
echo Dateien aus Ordner 2 werden in Ordner 1 gesucht...
echo.
echo Dateien aus Ordner 2, die in Ordner 1 fehlen:>>"%CLIPDATEI%"
echo.>>"%CLIPDATEI%"
for %%f in ("%ORDNER_2%\*.*") do (
if exist "%%~f" (
set /a ANZAHL_ORDNER_2+=1
if /i "%MIT_ENDUNG%"=="JA" (
set "SUCHNAME=%%~nxf"
if exist "%ORDNER_1%\!SUCHNAME!" (
rem Datei wurde gefunden
) else (
echo FEHLT IN ORDNER 1: "!SUCHNAME!"
echo !SUCHNAME!>>"%CLIPDATEI%"
set /a FEHLT_IN_ORDNER_1+=1
if "%TESTMODUS%"=="NEIN" (
echo !SUCHNAME!>>"%AUSGABE_1%"
)
)
) else (
set "SUCHNAME=%%~nf"
set "GEFUNDEN=NEIN"
for %%z in ("%ORDNER_1%\!SUCHNAME!.*") do (
if exist "%%~z" set "GEFUNDEN=JA"
)
if "!GEFUNDEN!"=="NEIN" (
echo FEHLT IN ORDNER 1: "!SUCHNAME!"
echo !SUCHNAME!>>"%CLIPDATEI%"
set /a FEHLT_IN_ORDNER_1+=1
if "%TESTMODUS%"=="NEIN" (
echo !SUCHNAME!>>"%AUSGABE_1%"
)
)
)
)
)
echo.>>"%CLIPDATEI%"
echo Dateien aus Ordner 1, die in Ordner 2 fehlen:>>"%CLIPDATEI%"
echo.>>"%CLIPDATEI%"
echo.
echo Dateien aus Ordner 1 werden in Ordner 2 gesucht...
echo.
for %%f in ("%ORDNER_1%\*.*") do (
if exist "%%~f" (
set /a ANZAHL_ORDNER_1+=1
if /i "%MIT_ENDUNG%"=="JA" (
set "SUCHNAME=%%~nxf"
if exist "%ORDNER_2%\!SUCHNAME!" (
rem Datei wurde gefunden
) else (
echo FEHLT IN ORDNER 2: "!SUCHNAME!"
echo !SUCHNAME!>>"%CLIPDATEI%"
set /a FEHLT_IN_ORDNER_2+=1
if "%TESTMODUS%"=="NEIN" (
echo !SUCHNAME!>>"%AUSGABE_2%"
)
)
) else (
set "SUCHNAME=%%~nf"
set "GEFUNDEN=NEIN"
for %%z in ("%ORDNER_2%\!SUCHNAME!.*") do (
if exist "%%~z" set "GEFUNDEN=JA"
)
if "!GEFUNDEN!"=="NEIN" (
echo FEHLT IN ORDNER 2: "!SUCHNAME!"
echo !SUCHNAME!>>"%CLIPDATEI%"
set /a FEHLT_IN_ORDNER_2+=1
if "%TESTMODUS%"=="NEIN" (
echo !SUCHNAME!>>"%AUSGABE_2%"
)
)
)
)
)
echo.>>"%CLIPDATEI%"
echo Zusammenfassung:>>"%CLIPDATEI%"
echo Dateien in Ordner 1: %ANZAHL_ORDNER_1%>>"%CLIPDATEI%"
echo Dateien in Ordner 2: %ANZAHL_ORDNER_2%>>"%CLIPDATEI%"
echo Fehlen in Ordner 1: %FEHLT_IN_ORDNER_1%>>"%CLIPDATEI%"
echo Fehlen in Ordner 2: %FEHLT_IN_ORDNER_2%>>"%CLIPDATEI%"
if "%TESTMODUS%"=="NEIN" (
call :zusammenfassung_schreiben "%AUSGABE_1%" "%ORDNER_1%" "%ORDNER_2%" "%ANZAHL_ORDNER_1%" "%ANZAHL_ORDNER_2%" "%FEHLT_IN_ORDNER_1%"
call :zusammenfassung_schreiben "%AUSGABE_2%" "%ORDNER_2%" "%ORDNER_1%" "%ANZAHL_ORDNER_2%" "%ANZAHL_ORDNER_1%" "%FEHLT_IN_ORDNER_2%"
)
type "%CLIPDATEI%" | clip
echo.
echo Fertig.
echo.
echo Dateien in Ordner 1: %ANZAHL_ORDNER_1%
echo Dateien in Ordner 2: %ANZAHL_ORDNER_2%
echo.
echo Fehlen in Ordner 1: %FEHLT_IN_ORDNER_1%
echo Fehlen in Ordner 2: %FEHLT_IN_ORDNER_2%
echo.
echo Die komplette Zusammenfassung wurde in die Zwischenablage kopiert.
echo.
if "%TESTMODUS%"=="JA" (
echo Es wurden noch keine Ergebnisdateien erstellt.
echo Wenn du Ergebnisdateien erstellen moechtest, entferne _test aus dem Dateinamen.
) else (
echo Ergebnisdatei in Ordner 1:
echo %AUSGABE_1%
echo.
echo Ergebnisdatei in Ordner 2:
echo %AUSGABE_2%
)
echo.
pause
exit /b
:kopf_schreiben
set "DATEI=%~1"
set "DIESER_ORDNER=%~2"
set "ANDERER_ORDNER=%~3"
echo Vergleichsergebnis>"%DATEI%"
echo.>>"%DATEI%"
echo Dieser Ordner:>>"%DATEI%"
echo %DIESER_ORDNER%>>"%DATEI%"
echo.>>"%DATEI%"
echo Vergleich mit:>>"%DATEI%"
echo %ANDERER_ORDNER%>>"%DATEI%"
echo.>>"%DATEI%"
echo Dateierweiterung beruecksichtigen: %MIT_ENDUNG%>>"%DATEI%"
echo.>>"%DATEI%"
echo Dateien, die in diesem Ordner fehlen:>>"%DATEI%"
echo.>>"%DATEI%"
exit /b
:zusammenfassung_schreiben
set "DATEI=%~1"
set "DIESER_ORDNER=%~2"
set "ANDERER_ORDNER=%~3"
set "DATEIEN_DIESER_ORDNER=%~4"
set "DATEIEN_ANDERER_ORDNER=%~5"
set "FEHLEN_HIER=%~6"
echo.>>"%DATEI%"
echo Zusammenfassung:>>"%DATEI%"
echo Dateien in diesem Ordner: %DATEIEN_DIESER_ORDNER%>>"%DATEI%"
echo Dateien im Vergleichsordner: %DATEIEN_ANDERER_ORDNER%>>"%DATEI%"
echo Dateien, die hier fehlen: %FEHLEN_HIER%>>"%DATEI%"
echo.>>"%DATEI%"
echo Vergleichsordner:>>"%DATEI%"
echo %ANDERER_ORDNER%>>"%DATEI%"
exit /b
:falsche_anzahl
echo Bitte genau zwei Ordner an dieses Skript senden.
echo.
echo Markiere im Explorer genau zwei Ordner,
echo dann Rechtsklick - Senden an verwenden.
echo.
pause
exit /b
:erster_kein_ordner
echo Der erste uebergebene Pfad ist kein Ordner:
echo %~1
echo.
pause
exit /b
:zweiter_kein_ordner
echo Der zweite uebergebene Pfad ist kein Ordner:
echo %~2
echo.
pause
exit /b
Wichtige Unterschiede der SendTo-Ergebnisvariante
Ergebnisdateien in den Ordnern
In jedem der beiden übergebenen Ordner wird eine passende Ergebnisdatei erstellt.
Darin steht, welche Dateien aus dem jeweils anderen Ordner in diesem Ordner fehlen.
Zusammenfassung in der Zwischenablage
Zusätzlich wird eine komplette Zusammenfassung in die Windows-Zwischenablage kopiert.
Dadurch kann das Ergebnis direkt in eine E-Mail, ein Dokument, einen Chat oder eine Webseite eingefügt werden.
Robuste Ausgabe in Zwischenablage und Ergebnisdateien
Auch bei der SendTo-Ergebnisvariante wird die Umleitung bewusst vor den echo-Befehl gesetzt.
>>"%CLIPDATEI%" echo Dateien in Ordner 1: %ANZAHL_ORDNER_1%
Diese Schreibweise verhindert, dass Batch Zahlen direkt vor einer Umleitung falsch interpretiert. Das ist besonders wichtig bei Zusammenfassungen, weil dort häufig Zeilen mit Zahlen enden.
Wie wird die SendTo-Variante eingerichtet?
Die SendTo-Batchdatei oder eine Verknüpfung davon kann in den Windows-Ordner Senden an gelegt werden.
Den SendTo-Ordner öffnet man mit:
shell:sendto
Danach kann man im Explorer genau zwei Ordner markieren und mit Rechtsklick > Senden an an das Skript übergeben.
Mit der Testumgebung kannst du zum Beispiel diese beiden Ordner markieren:
C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen\02_SendTo_Zwei_Ordner_vergleichen\Ordner_A
C:\TOPTORIALS_CODE\1000_TESTBEREICH\TOPTORIALS_Testdaten_Windows_Automatisierung_Batch_V001\010_Fehlende_Dateien_vergleichen\02_SendTo_Zwei_Ordner_vergleichen\Ordner_B
Was passiert im Testmodus?
Solange _test im Dateinamen steht, wird nur angezeigt, was passieren würde.
Die Testvariante erstellt keine endgültigen Ergebnisdateien.
Das ist praktisch, um erst zu prüfen, ob die richtigen Ordner verglichen werden und ob die Abfrage mit oder ohne Dateierweiterung korrekt gewählt wurde.
Was wird verglichen?
Das Skript vergleicht Dateinamen.
Es vergleicht nicht:
- Dateiinhalte
- Dateigrößen
- Änderungsdaten
- Prüfsummen
- Unterordnerstrukturen
Das Skript ist also ein Dateinamenvergleich, kein vollständiger Inhaltsvergleich.
Werden Unterordner durchsucht?
Nein. Die Skripte vergleichen nur die Dateien direkt in den beiden ausgewählten Ordnern.
Unterordner werden nicht rekursiv durchsucht.
Das ist bewusst so gehalten, damit das Skript übersichtlich bleibt und der Vergleich klar nachvollziehbar ist.
Typische Beispiele
RAW/JPG-Vergleich ohne Dateierweiterung
Ordner 1:
Bild_001.CR3
Bild_002.CR3
Bild_003.CR3
Ordner 2:
Bild_001.JPG
Bild_003.JPG
Bild_004.JPG
Ergebnis ohne Dateierweiterung:
Bild_002 fehlt in Ordner 2.
Bild_004 fehlt in Ordner 1.
Exakter Vergleich mit Dateierweiterung
Ordner 1:
Rechnung.pdf
Ordner 2:
Rechnung.docx
Ergebnis mit Dateierweiterung:
Rechnung.pdf fehlt in Ordner 2.
Rechnung.docx fehlt in Ordner 1.
Häufige Fehler
Die Datei wird nur im Editor geöffnet
Dann wurde sie wahrscheinlich als Textdatei gespeichert.
Die Datei muss zum Beispiel so heißen:
010_fehlende_dateien_vergleichen_test.bat
und nicht:
010_fehlende_dateien_vergleichen_test.bat.txt
Die SendTo-Variante meldet, dass genau zwei Ordner benötigt werden
Dann wurden entweder zu wenige oder zu viele Elemente übergeben.
Für diese Variante müssen genau zwei Ordner im Explorer markiert werden.
Eine Datei wurde statt eines Ordners übergeben
Die SendTo-Variante erwartet Ordner. Dateien werden nicht als Eingabe akzeptiert.
Das Ergebnis ist leer
Dann wurden keine fehlenden Dateien gefunden. Das bedeutet, dass beide Ordner nach der gewählten Vergleichsart denselben Dateibestand enthalten.
RAW und JPG werden als unterschiedlich erkannt
Dann wurde wahrscheinlich der Vergleich mit Dateierweiterung gewählt.
Für RAW/JPG-Vergleiche sollte ohne Dateierweiterung verglichen werden.
Was haben wir gelernt?
In diesem Teil wurden mehrere wichtige Batch-Grundlagen gezeigt:
Zwei Ordner können anhand ihrer Dateinamen verglichen werden.
Ein Vergleich kann mit oder ohne Dateierweiterung erfolgen.
for kann Dateien in einem Ordner durchlaufen.
if exist kann prüfen, ob eine passende Datei vorhanden ist.
%~nxf kann Dateiname und Erweiterung liefern.
%~nf kann den Dateinamen ohne Erweiterung liefern.
SendTo-Skripte können genau zwei Ordner entgegennehmen.
Ergebnisdateien können mit Zeitstempel erzeugt werden.
clip kann eine Zusammenfassung in die Zwischenablage kopieren.
Umleitungen können vor den echo-Befehl gesetzt werden, damit Zahlen am Zeilenende zuverlässig geschrieben werden.
Damit ist dieses Skript-Paket ein nützlicher Abschluss des Batch-Grundkurses. Es zeigt, wie man mit Batch nicht nur Dateien erstellt, umbenennt oder kopiert, sondern auch einfache Kontroll- und Vergleichsaufgaben automatisieren kann.
Video zu diesem Tutorial:
Das könnte Dich auch interessieren
Keine Einträge gefunden

