Batchdatei-FOR-Schleife zum Kopieren von Ordnern nur, wenn sie in einem anderen Ordner vorhanden sind

Batchdatei-FOR-Schleife zum Kopieren von Ordnern nur, wenn sie in einem anderen Ordner vorhanden sind

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

\ApplicationsBevor ich die Unterordnerstruktur mit der \UpdatesUnterordnerstruktur [neue Version] aktualisiere , muss ich die \ApplicationsUnterordnerstruktur in den \Previous VersionsOrdner kopieren. Sobald dies abgeschlossen ist, muss die UpdatesUnterordnerstruktur in den /ApplicationsOrdner 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.

AppsRootIch 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 /ApplicationsVerzeichnis in das /Previous VersionsVerzeichnis abschließen sollte, aber NUR, wenn dieselben zu kopierenden Verzeichnisse im /UpdatesVerzeichnis 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 Backslashs C:\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 VersionsXCOPY

  • Der RootTeil der Namen wurde von den Variablen für die Verzeichnisse entfernt SET, 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

Unterstützende Ressourcen

  • ANRUF
  • XKOPIEREN

      /E           Copies directories and subdirectories, including empty ones.
                   Same as /S /E. May be used to modify /T.
    
      /T           Creates directory structure, but does not copy files. Does not
                   include empty directories or subdirectories. /T /E includes
                   empty directories and subdirectories.
    

verwandte Informationen