o0julia0o
Goto Top

Batch soll 2 Dateien suchen, wenn vorhanden die jeweils gefundene aus einem Ordner kopiern

hi, ich bastel hier schon ein paar Tage dran herum, also immer mal wieder. So ganz funktioniert das nie, wie ich das möchte.

Strukur ist folgende:
Batch-Ort: Hauptordner\#Im
Hauptordner\#Im\GB\
dort sind 2 Dateien enthalten: wasser.txt & wasser2.txt und noch weitere Dateien und Ordner.

Der Gesamte Hauptordner samt Unterordnern außer dem #Im-Ordner soll nun nach wasser.txt & wasser2.txt durchsucht werden.

1. Es soll wenn wasser.txt gefunden wird der Inhalt des GB-Ordners kopiert werden in den Ordner mit der wasser.txt. Dabei können mehrere Ordner eine wasser.txt enthalten. ->gleiches gilt für die wasser2.txt

2. Zuvor soll aber die wasser.txt als wasser.txt_sic gesichert werden, die in dem jeweiligen Ordner gefunden wurde. Wenn bereits eine wasser.txt_sic vorhanden ist soll sie als wasser.txt_sic2 gesichert werden. Also wenn ich die batch 5x ausführe, dann wird in Zukunft die gefundene wasser.txt immer als wasser.txt_sic2 gesichert und die wasser.txt_sic nur beim 1. Mal verwendet als Sicherungsname. -> gleiches gilt für die wasser2.txt

3. Soweit hatte ich das alles schon hinbekommen. Jetzt kommt allerdings eine Einschränkung für Schritt 1. Hier soll der gesamte Ordner außer einer der beiden Dateien wasser.txt und wasser2.txt, nämlich die nicht gefunden wurde kopiert werden. Also am Beispiel:

Hauptordner\Daten1\wasser2.txt wird gefunden
Hauptordner\Daten1\wasser.txt existiert nicht

Jetzt soll die gefundene wasser2.txt als wasser2.txt_sic2 gespeichert werden, da dort auch eine wasser2.txt_sic bereits vorhanden ist.

Danach soll der Ordnerinhalt #Im\GB in den gefundenen Ordner: Hauptordner\Daten1 kopiert werden. Aber Achtung! Nicht die wasser.txt, weil diese nicht in dem Ordner existiert in dem Beispiel.

Das ist mein bester Versuch, irgendwo hapert es aber:
@echo off
setlocal enabledelayedexpansion

set "sourceDir=%~dp0GB"    
set "searchFile1=wasser.txt"  
set "searchFile2=wasser2.txt"  

REM Gehe alle Ordner ein Verzeichnis höher als #Im durch
for /f "delims=" %%A in ('dir /s /b /a-d "%~dp0..\%searchFile1%" ^| find /v "%~dp0"') do (  
    set "dir=%%~dpA"  

    REM Überprüfen, ob wasser.txt existiert
    if exist "%%A" (  
        REM Wenn die _sic-Datei existiert, erstelle _sic2 (Überschreiben)
        if exist "!dir!wasser.txt_sic" (  
            copy "%%A" "!dir!wasser.txt_sic2" /Y  
        ) else (
            REM Wenn die _sic-Datei nicht existiert, erstelle sie
            copy "%%A" "!dir!wasser.txt_sic" /Y  
        )
    )

    REM Überprüfen, ob wasser2.txt existiert
    if exist "%%A" (  
        REM Wenn die _sic-Datei existiert, erstelle _sic2 (Überschreiben)
        if exist "!dir!wasser2.txt_sic" (  
            copy "%%A" "!dir!wasser2.txt_sic2" /Y  
        ) else (
            REM Wenn die _sic-Datei nicht existiert, erstelle sie
            copy "%%A" "!dir!wasser2.txt_sic" /Y  
        )
    )

    REM Kopieren des GB-Ordners nach !dir!
    REM Überprüfen, ob die Dateien wasser.txt oder wasser2.txt vorhanden sind
    if exist "!dir!wasser.txt" (  
        xcopy /E /I /Y "%sourceDir%\*" "!dir!" /EXCLUDE:wasser2.txt >nul 2>&1  
    ) 
    if exist "!dir!wasser2.txt" (  
        xcopy /E /I /Y "%sourceDir%\*" "!dir!" /EXCLUDE:wasser.txt >nul 2>&1  
    )
)

pause
exit

Ich hoffe Jemand kann da etwas Licht ins Dunkel bringen. Danke schon einmal!

Content-ID: 671723

Url: https://administrator.de/forum/batch-soll-2-dateien-suchen-wenn-vorhanden-die-jeweils-gefundene-aus-einem-ordner-kopiern-671723.html

Ausgedruckt am: 03.03.2025 um 22:03 Uhr

DivideByZero
DivideByZero 03.03.2025 um 21:34:37 Uhr
Goto Top
Es ist wirklich Zeit für Powershell. Und solche Fragen kannst Du übrigens heutzutage hervorragend im Dialog mit ChatGPT oder Claude lösen.
o0Julia0o
o0Julia0o 03.03.2025 um 21:42:05 Uhr
Goto Top
Jo, danke ich hab von Powershell so gar keine Ahnung. Einmal ein Tutroial gemacht von 30 Minuten ;). Soll schon per Batch sein. Ist ja auch theoretisch möglich. Einzelne parts bekomme ich hin, aber im Gesamtfluss hapert es noch.