37414
Apr 13, 2016
1671
5
0
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 301658
Url: https://administrator.de/contentid/301658
Printed on: April 26, 2024 at 03:04 o'clock
5 Comments
Latest comment
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