Batch: Datei in 2 Ordner suchen, falls die gleiche Datei in beiden Ordner, dann in Zielordner kopieren
Hallo meine Freunde..
Scheitere derzeit an leichten Sachen..
Folgendes:
Ich muss eine Batchdatei schreiben, in der ich 2 Ordner nach vielen Dateien untersuchen muss..
Das ganze schaut so aus:
Quelleordner:
Rechnung_26547
Storno_10523
Inhalt_75841
Verzeichnisordner:
Storno_10523
Zielordner:
Von mir wird verlangt, die Datei im Verzeichnisordner im Quelleordner zu suchen und wenn eine Übereinstimmung vorhanden ist, diese Datei in das Zielordner zu kopieren.
Gruß
Scheitere derzeit an leichten Sachen..
Folgendes:
Ich muss eine Batchdatei schreiben, in der ich 2 Ordner nach vielen Dateien untersuchen muss..
Das ganze schaut so aus:
Quelleordner:
Rechnung_26547
Storno_10523
Inhalt_75841
Verzeichnisordner:
Storno_10523
Zielordner:
Von mir wird verlangt, die Datei im Verzeichnisordner im Quelleordner zu suchen und wenn eine Übereinstimmung vorhanden ist, diese Datei in das Zielordner zu kopieren.
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 280416
Url: https://administrator.de/forum/batch-datei-in-2-ordner-suchen-falls-die-gleiche-datei-in-beiden-ordner-dann-in-zielordner-kopieren-280416.html
Ausgedruckt am: 10.04.2025 um 17:04 Uhr
9 Kommentare
Neuester Kommentar
Guten Morgen,
falls es Powershell sein darf:
falls es Powershell sein darf:
$sourcepath = ".\Desktop\quelle"
$path = ".\Desktop\test"
$sarr = gci $sourcepath | select -ExpandProperty Name
$arr = gci $path | select -ExpandProperty Name
foreach($a in $arr){
if($sarr -contains $a){
Copy-Item $sourcepath\$a -Destination $path -Force
}}

Muss leider Batch sein!
So ein alter Käse @echo off
set "quellordner=C:\quelle"
set "verzeichnisordner=C:\verzeichnisordner"
set "zielordner=C:\ziel"
for %%b in ("%verzeichnisordner%\*.*") DO @(
for /f "tokens=* delims=" %%a in ('dir /b /s /a-d "%quellordner%" ^| findstr /i /e /c:"%%~nxb"') DO @(
copy "%%a" "%zielordner%"
)
)
btw. mit Powershell lässt sich das noch effektiver mit dem Compare-Object machen, anstatt jedes File in einer Schleife zu durchlaufen:
$quelle = "C:\quelle"
$Verzeichnisordner = "C:\Verzeichnisordner"
$ziel = "C:\ziel"
$vFiles = gci $Verzeichnisordner -Recurse | ?{!$_.PSIsContainer}
$qfiles = gci $quelle -Recurse | ?{!$_.PSIsContainer}
compare $qFiles $vFiles -Property Name -IncludeEqual -ExcludeDifferent -PassThru | copy-item -destination $ziel

Folgendes: Auftraggeber hat da was hinzugefügt!
Haahaha 
@echo off
set /p nummer=Geben sie eine Nummer ein:
set "quellordner=C:\quelle"
set "verzeichnisordner=C:\Verzeichnisordner"
set "zielordner=C:\ziel"
set found=
for /f "tokens=* delims=" %%b in ('dir /b /s /a-d "%verzeichnisordner%" ^| findstr /i /c:"%nummer%"') DO @(
for /f "tokens=* delims=" %%a in ('dir /b /s /a-d "%quellordner%" ^| findstr /i /c:"%nummer%"') DO @(
copy "%%a" "%zielordner%"
set found=1
)
)
if not defined found echo Keine Datei gefunden!
Zitat von @114757:
btw. mit Powershell lässt sich das noch effektiver mit dem Compare-Object machen, anstatt jedes File in einer Schleife zu
durchlaufen:
btw. mit Powershell lässt sich das noch effektiver mit dem Compare-Object machen, anstatt jedes File in einer Schleife zu
durchlaufen:
Inwiefern eig. effektiver (mal abgesehen von weniger Zeilen Skript?). Wenn ich die nachmesse (5 Dateien, 111 MB) komme ich bei beiden Skripten auf 358 Millisekunden.
P.S. was soll futler heißen?

Zitat von @TlBERlUS:
Inwiefern eig. effektiver (mal abgesehen von weniger Zeilen Skript?). Wenn ich die nachmesse (5 Dateien, 111 MB) komme ich bei
beiden Skripten auf 358 Millisekunden.
Damit meine ich nur das nicht eine Schleife jede Datei einzeln überprüfen muss, sondern das compare-object das für einen erledigt. Ist Geschmackssache ...Inwiefern eig. effektiver (mal abgesehen von weniger Zeilen Skript?). Wenn ich die nachmesse (5 Dateien, 111 MB) komme ich bei
beiden Skripten auf 358 Millisekunden.
P.S. was soll futler heißen?
Praktikant der sich hier seine Arbeit machen lässt