Diese Batchdatei sollte für die Aufgabe arbeiten:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SourceFolder=\\DistantServer\path"
set "TargetFolder=D:\Backup"
for /D %%I in ("%SourceFolder%\*") do (
if exist "%%I\Config\Old\" (
rd /Q /S "%TargetFolder%\%%~nxI\old" 2>nul
%SystemRoot%\System32\xcopy.exe "%%I\Config\Old" "%TargetFolder%\%%~nxI\old\" /C /E /H /I /K /Q /R /Y >nul
)
)
endlocal
Der Befehl FÜR Suche in Quellordner als mit Umgebungsvariable SourceFolder
für nicht versteckt Unterordner definiert. Jedem gefundenen Unterordner wird ein vollständiger Pfad zugewiesen, der nicht mit einem umgekehrten Schrägstrich endet und niemals in doppelte Anführungszeichen eingeschlossen ist, um die Variable I
zu referenzieren, die mit %%I
referenziert wird.
Der Befehl IF prüft die Existenz des Unterordner Config\old
in aktuellen Unterordner von Quellordner. Der gefundene Unterordner wird ignoriert, wenn er den Unterordner Config\old
nicht enthält.
Auf Existenz Config\old
in aktuellen Unterordner von Quelle den RD Befehl Ordnern zunächst auf seiner unabhängige Existenz Ordner ruhig mit allen Unterordner des entsprechenden Ziels entfernt, um sicherzustellen, dass die Kopie in 1 nächste Ergebnisse getan: 1 Ordner kopieren. Der Befehl RD kann entfernt werden, wenn der Zielordner höchstwahrscheinlich nie existiert, bevor der Kopiervorgang abgeschlossen ist oder wenn der vorhandene Inhalt des Zielordners mit dem aktuellen Inhalt des Quellordners zusammengeführt werden soll.
%%~nxI
verweist auf den aktuellen Unterordner im Quellordner ohne Pfad, d. H. Ohne Ordnerpfad, wie mit der Umgebungsvariablen definiert.
Der Befehl XCOPY kopiert den gesamten Ordner Config\old
in aktuellen Unterordner von Quellenordner in einen Unterordner old
im Zielordner, wie durch die Umgebungsvariable TargetFolder
definiert. Die gesamte Verzeichnisstruktur zum entsprechenden Zielordner wird automatisch von XCOPY erstellt, falls nicht bereits vorhanden, weil die Zielspezifikation mit einem Backslash endet, der eine eindeutige Angabe für XCOPY darstellt, dass die Zielzeichenfolge ein Verzeichnis angibt.
Hinweis: Der gesamte Code oben ohne Befehl RD könnte auch zu einer einzigen Befehlszeile optimiert werden.
@for /D %%I in ("\\DistantServer\path\*") do @if exist "%%I\Config\Old\" %SystemRoot%\System32\xcopy.exe "%%I\Config\Old" "D:\Backup\%%~nxI\old\" /C /E /H /I /K /Q /R /Y >nul
Einzelbefehlszeile mit dem Befehl RD:
@for /D %%I in ("\\DistantServer\path\*") do @if exist "%%I\Config\Old\" rd /Q /S "D:\Backup\%%~nxI\old" 2>nul & %SystemRoot%\System32\xcopy.exe "%%I\Config\Old" "D:\Backup\%%~nxI\old\" /C /E /H /I /K /Q /R /Y >nul
für die verwendeten Befehle verstehen und wie sie arbeiten, eine Eingabeaufforderung öffnen, führen Sie dort die folgenden Befehle ein, und lesen Sie völlig alle Hilfe Seiten, die für jeden Befehl sehr sorgfältig angezeigt werden.
echo /?
endlocal /?
for /?
if /?
rd /?
set /?
setlocal /?
xcopy /?
Lesen Sie auch die Microsoft Artikel über Using Command Redirection Operators für eine Erklärung der >nul
und 2>nul
. Und lesen Sie die Antwort auf Single line with multiple commands using Windows batch file für eine Erklärung des Betreibers &
wie im letzten Batch-Code verwendet (einzelne Befehlszeile mit RD).
Bitte geben Sie uns ein Beispiel von dem, was Sie versucht haben, und die Fehler, wir können Ihnen dann helfen, dies zu verstehen und zu korrigieren. – LP154