Ich versuche, eine Batchdatei zu schreiben, die Ordner von einem Ordnerspeicherort an einen anderen kopiert, aber nur, wenn sie in einem dritten Ordner vorhanden sind.
Das klingt verwirrend, ich werde es noch einmal versuchen.
Ich habe folgende 3 Ordner:
- Aktualisierung
- Anwendungen
- Vorherige Versionen
\Applications
Bevor ich die Unterordnerstruktur mit der \Updates
Unterordnerstruktur [neue Version] aktualisiere , muss ich die \Applications
Unterordnerstruktur in den \Previous Versions
Ordner kopieren. Sobald dies abgeschlossen ist, muss die Updates
Unterordnerstruktur in den /Applications
Ordner kopiert werden.
Ich bin bis hierhin gekommen:
Setlocal EnableDelayedExpansion
Set UpdtRoot=C:\Test\Updates
Set AppsRoot=C:\Test\Apps
Set PVerRoot=C:\Test\Previous Versions
FOR /d %%i IN ("!UpdtRoot!\*.*") DO xcopy "!AppsRoot!\%%~nxi" "!PVerRoot!\%%~nxi\" /e
Dies funktioniert jedoch nicht, es kopiert alle Ordner von AppsRoot nach PVerRoot.
AppsRoot
Ich brauche es, um Unterordner von nach zu kopieren PVerRoot
, aber nur, wenn sie in vorhanden sind UpdtRoot
. Ich brauche es NUR, um die Ordner und Unterordner zu kopieren, also überhaupt keine Dateien.
Antwort1
Ich habe ein Batch-Skript beigefügt, das Ihre Erklärungen zum rekursiven Kopieren aller Unterordner vom /Applications
Verzeichnis in das /Previous Versions
Verzeichnis abschließen sollte, aber NUR, wenn dieselben zu kopierenden Verzeichnisse im /Updates
Verzeichnis vorhanden sind.
Bemerkenswerte Gegenstände
Stellen Sie sicher, dass
SET NewCopyDir=%CopyDir:C:\Test\Apps\=%
die Zeichen darin enthalten sind, die dem vollständigen Verzeichnispfad einschließlich des abschließenden BackslashsC:\Test\Apps\
entsprechen . Dies ist die Logik, die das analysiert, um es an das Ende der und Verzeichnisse anzuhängen, damit die Befehle diese Verzeichnisse entsprechend kopieren.Applications
/Updates
/Previous Versions
XCOPY
Der
Root
Teil der Namen wurde von den Variablen für die Verzeichnisse entferntSET
, aber das ist nicht wirklich wichtig, aber ich habe sie gekürzt, damit es in der Skriptlogik etwas sauberer aussieht.
Batch-Skript
@ECHO ON
SET "Updt=C:\Test\Updates"
SET "Apps=C:\Test\Apps"
SET "PVer=C:\Test\previous Versions"
IF NOT EXIST "%Updt%" MD "%Updt%"
IF NOT EXIST "%Apps%" MD "%Apps%"
IF NOT EXIST "%PVer%" MD "%PVer%"
FOR /D %%S IN ("%Apps%\*") DO (
CALL :Routine "%%~S"
)
GOTO :EOF
:Routine
SET CopyDir=%~1
SET NewCopyDir=%CopyDir:C:\Test\Apps\=%
IF EXIST "%Updt%\%NewCopyDir%" XCOPY /E /T "%Apps%\%NewCopyDir%" "%PVer%\%NewCopyDir%\"
GOTO :EOF