
37414
13.04.2016
Per Batchdatei kopieren, wenn eine bestimmte Anzahl und Bezeichnung von Dateien in einem Verzeichnis vorhanden sind
Hallo,
um einen Kopiervorgang per robocopy zu starten, möchte ich zunächst in einem bestimmten Verzeichnis prüfen, ob bestimmte Dateien im Quellverzeichnis vorhanden sind.
Wenn ja, soll der Kopiervorgang starten. Wenn nein, soll eine Fehlermeldung erscheinen.
Quelle:
S:\install\AidA\kopieren\Datei_1
S:\install\AidA\kopieren\Datei_2
S:\install\AidA\kopieren\Datei_3
S:\install\AidA\kopieren\Datei_4
Ziel:
\\Mueller-R\C$\Program Files\AidA
Im Quellverzeichnis dürfen nur genau diese 4 Dateien enthalten sein... keine weiteren!!
Nur dann soll kopiert werden.
Mein bisheriger Code:
In diesem Code habe ich schon mal mit "if exist", bzw. "if not exist" versucht... aber ich denke, dass es elegantere Lösungen gibt
Danke und Gruss,
imebro
um einen Kopiervorgang per robocopy zu starten, möchte ich zunächst in einem bestimmten Verzeichnis prüfen, ob bestimmte Dateien im Quellverzeichnis vorhanden sind.
Wenn ja, soll der Kopiervorgang starten. Wenn nein, soll eine Fehlermeldung erscheinen.
Quelle:
S:\install\AidA\kopieren\Datei_1
S:\install\AidA\kopieren\Datei_2
S:\install\AidA\kopieren\Datei_3
S:\install\AidA\kopieren\Datei_4
Ziel:
\\Mueller-R\C$\Program Files\AidA
Im Quellverzeichnis dürfen nur genau diese 4 Dateien enthalten sein... keine weiteren!!
Nur dann soll kopiert werden.
Mein bisheriger Code:
@ echo off
set "quelle=S:\install\AidA\kopieren"
set "ziel=\\Mueller-R\C$\Program Files\AidA"
if exist S:\install\AidA\kopieren\Datei_1 goto copy
if not exist S:\install\AidA\kopieren\Datei_1 goto fehler
:copy
robocopy "%quelle%" "%ziel%" /S /Z
:fehler
echo Bitte Verzeichnis "S:\install\AidA\kopieren" prüfen!
%SystemRoot%\explorer.exe "%ziel%"
exit
In diesem Code habe ich schon mal mit "if exist", bzw. "if not exist" versucht... aber ich denke, dass es elegantere Lösungen gibt
Danke und Gruss,
imebro
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 301658
Url: https://administrator.de/forum/per-batchdatei-kopieren-wenn-eine-bestimmte-anzahl-und-bezeichnung-von-dateien-in-einem-verzeichnis-vorhanden-301658.html
Ausgedruckt am: 03.04.2025 um 20:04 Uhr
5 Kommentare
Neuester Kommentar
Guten Morgen,
Powershell:
Powershell:
clear-host
$source = "C:\Users\test\Desktop\source"
$dest = "C:\Users\test\Desktop\dest"
$files = gci $source | ?{$_ -match "Datei_[1-4]{1}"}
$files2 = gci $source
if ($files2.count -eq $files.count){
foreach($f in $files){
if ($f -match "Datei_[1-4]{1}.txt"){
Copy-Item $source\$f -Destination $dest
}
}
}else{
Write-Host "Bitte Verzeichnis $source prüfen!" -ForegroundColor red
}
Hallo imebro,
wie viele überflüssige GOTOs willst du denn noch in die paar Zeilen Code packen?
Zu deiner Frage: Wenn es nicht weniger als die 4 Items sein dürfen, reicht deine Abfrage. Wenn es aber auch mehr als diese 4 sein könnten und du das auch als Fehler werten willst, brauchst du eine weitere Prüfung.
Verarbeite die Ausgabe des DIR Befehls und zähle die gefundenen Items (geht mit FIND, siehe unten). Wenn es 4 sind, geht's mit dem nächsten IF weiter ...
Grüße
rubberman
wie viele überflüssige GOTOs willst du denn noch in die paar Zeilen Code packen?
Zu deiner Frage: Wenn es nicht weniger als die 4 Items sein dürfen, reicht deine Abfrage. Wenn es aber auch mehr als diese 4 sein könnten und du das auch als Fehler werten willst, brauchst du eine weitere Prüfung.
Verarbeite die Ausgabe des DIR Befehls und zähle die gefundenen Items (geht mit FIND, siehe unten). Wenn es 4 sind, geht's mit dem nächsten IF weiter ...
@echo off &setlocal
REM Deine Variablendefinitionen hier ...
for /f %%i in ('dir /b "%quelle%\"^|find /c /v ""') do if "%%i"=="4" if exist "%quelle%\lib\" if exist "%quelle%\aida-frontend-1.0.0-SNAPSHOT.jar" if exist "%quelle%\start-aida-32bit.bat" if exist "%quelle%\start-aida-64bit.bat" (
robocopy "%quelle%" "%ziel1%" /S /Z /LOG+:aida.log
robocopy "%quelle%" "%ziel2%" /S /Z
robocopy "%quelle%" "%ziel3%" /S /Z
robocopy "%quelle%" "%ziel4%" /S /Z
robocopy "%quelle%" "%ziel5%" /S /Z
%SystemRoot%\explorer.exe /n,/e,"%ziel1%"
exit /b
)
echo Bitte Verzeichnis "%quelle%" pruefen!
pause
%SystemRoot%\explorer.exe /n,/e,"%quelle%"
Grüße
rubberman
Hallo imebro
Grüße
rubberman
Mit "find" und der "for-Abfrage" wird also nun ermittelt, ob sich tatsächlich nur 1 Verzeichnis und 3 Dateien in dem Quellverzeichnis befinden?
Es wird ermittelt, ob sich genau 4 Dateisystemelemente dort befinden. Hier wird noch nichts über die Eigenschaften dieser Elemente geprüft.Bei der ersten Angabe ".../lib" handelt es sich nämlich um ein Verzeichnis mit dem Namen "lib".
Ja, das hatte ich bereits vermutet und entsprechend berücksichtigt, indem ich für die Prüfung einen Backslash angehängt habe. Gäbe es statt dem Verzeichnis "lib" eine Datei "lib", würde dieser Test fehlschlagen.Grüße
rubberman