3

Я пытаюсь написать командный файл, который копирует папки из одной папки в другую, но только если они существуют в третьей папке.

Это звучит странно, я попробую еще раз.

У меня есть следующие 3 папки:

  • Обновления
  • Приложения
  • Предыдущие версии

Перед обновлением структуры подпапки \Applications с помощью структуры подпапки [новая версия] \Updates мне нужно скопировать структуру подпапки \Applications папку \Previous Versions . После этого необходимо скопировать структуру подпапок Updates папку /Applications .

Я дошел до следующего:

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

Это не работает, хотя, он копирует все папки из AppsRoot в PVerRoot.

Мне нужно, чтобы скопировать подпапки из AppsRoot в PVerRoot , но только если они существуют в UpdtRoot . Мне нужно только, чтобы скопировать папки и подпапки ТОЛЬКО так, чтобы никаких файлов вообще.

1 ответ1

0

Пакетный файл цикл FOR для копирования папок, только если они существуют в другой папке

Я пытаюсь написать командный файл, который копирует папки из одной корневой папки в другую, но только если они существуют в третьей папке.

Я хотел бы иметь возможность копировать папки из AppsRoot в PVerRoot, но только если они существуют в UpdtRoot.

комментарий: это только папки, которые мне нужно скопировать.

Ниже приведен пакетный сценарий, который должен завершить то, что, как вы объясняете, необходимо рекурсивно копировать все подпапки из каталога /Applications каталог /Previous Versions , но ТОЛЬКО если эти каталоги для копирования существуют в каталоге /Updates .

Примечания: Вы должны убедиться , что SET NewCopyDir=%CopyDir:C:\Test\Apps\=% имеет C:\Test\Apps\ символы в нем , чтобы соответствовать каталогу Applications полному пути , включая заканчивающуюся обратную косую черту. Это логика, которая разбирает это, чтобы добавить в конец каталогов /Updates и /Previous Versions чтобы команды XCOPY скопировали эти каталоги соответствующим образом.

Я убрал часть Root из имен ваших переменных SET для каталогов, но это не имеет большого значения, но я сократил их, чтобы это выглядело немного чище в логике сценария.

Пример пакетного скрипта

@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

Дополнительная информация и ресурсы

Используемые опции XCOPY

  /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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .