Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование каталога с исключениями и переименованием

Ответить
Настройки темы
CMD/BAT - [решено] Копирование каталога с исключениями и переименованием

Аватара для Hollou

Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: Hollou
Дата: 24-02-2012
Добрый день.
Нужно скопировать содержимое каталога (Папка0) за исключением одной папки (из-за её большого веса), при этом каждая новая копия этого каталога должна переименовываться (Папка1-Папка2-ПапкаN, всего 29 копий) и создать для копий основного каталога символическую ссылку на исключенную из копирования папку (название не меняется), находящуюся в оригинальном каталоге (Папка0).

Можно, конечно, собрать все расширения и названия папок, имеющихся в каталоге, и использовать множество повторяющихся команд, но должно быть более элегантное решение.

И ещё в вдогонку: нужно скопировать каталог (Папка0) с переименованием каждой новой копии (Папка1-Папка2-ПапкаN, всего 29 копий).

Помогите, пожалуйста, реализовать это любым работающим способом.

Отправлено: 06:35, 24-02-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Hollou:
скопировать содержимое каталога (Папка0) »
Куда конкретно скопировать?

Цитата Hollou:
всего 30 копий »
Что потом, после 30, делать?

Попробуйте так:
читать дальше »
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=E:\Песочница\0122\Source
set sDestFolder=E:\Песочница\0122\Destination
set sExcludeFolder=02

for /l %%i in (1, 1, 30) do if not exist "%sDestFolder%\Source%%i" if not defined sCount set sCount=%%i

call :GetLastPartName "%sSourceFolder%"

call :GetTemporaryName
>"%TemporaryName%" echo %sSourceFolder%\%sExcludeFolder%

xcopy.exe "%sSourceFolder%" "%sDestFolder%\%LastPartName%%sCount%\" /e /f /h /r /k /y /exclude:%TemporaryName%
mklink.exe /d "%sDestFolder%\%LastPartName%%sCount%\%sExcludeFolder%" "%sSourceFolder%\%sExcludeFolder%"

>nul del /f /q "%TemporaryName%"

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
:GetLastPartName
    setlocal enableextensions enabledelayedexpansion

    set sLastPart=%~nx1
    set sProcName=%~0

    endlocal & set %sProcName:~4%=%sLastPart%
    exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetTemporaryName()
rem 
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
    setlocal enableextensions enabledelayedexpansion

:NextName
    set sTempName=%temp%\temp%random%.tmp

    if exist "%sTempName%" goto :NextName

    set sProcName=%~0

    endlocal & set %sProcName:~4%=%sTempName%
    exit /b 0
rem ==========================================================================

где: «sSourceFolder» — откуда копировать («Папка0»), «sDestFolder» — куда копировать, sExcludeFolder — имя исключаемой папки («за исключением одной папки»). Поправьте на свои данные и пробуйте, не забывая, что после двенадцати часов карета превратится … после 30 запусков поведение пакетного файла будет непредсказуемым.

Отправлено: 07:44, 24-02-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Hollou

Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


C:\Catalog - каталог
C:\Catalog\Folder0 - папка, которую нужно размножить 29 раз в каталоге, исключив при этом подпапку с большим весом, и для копий создав символические ссылки на исключенную папку
C:\Catalog\Folder0\Parameters - папка с большим весом, на которую нужно создать символическую ссылку в каждой копии Folder1-29
C:\Catalog\Folder1...29 - копии папки Folder0
Скоро опробую ваш вариант.

Последний раз редактировалось Hollou, 24-02-2012 в 08:49.


Отправлено: 08:41, 24-02-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Hollou, озвучьте конечную цель Ваших действий.

Отправлено: 08:47, 24-02-2012 | #4


Аватара для Hollou

Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


Из каждой скопированной папки Folder1...29 запускается приложение, которому нужны файлы папки Parameters, находящейся в папке Folder0 (файлов очень много, разных расширений, под 100 Гб). Предоставить эти файлы для каждой копии не представляется возможным, поэтому нужна символическая ссылка - так у каждой копии будет папка Parameters. Копировать и переименовывать папку Folder0, а так же создавать ссылки в ручную - слишком долго.
Не так объяснил? Извините, если что.

Отправлено: 09:00, 24-02-2012 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Hollou, действие по созданию тридцати копий папки «Folder0» — однократное?

Отправлено: 09:05, 24-02-2012 | #6


Аватара для Hollou

Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
Hollou, действие по созданию тридцати копий папки «Folder0» — однократное? »
Да.

Отправлено: 09:06, 24-02-2012 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


И правильно ли я понял, что копии «Folder1...29» должны создаваться в том же каталоге, что и «Folder0»?

Отправлено: 09:07, 24-02-2012 | #8


Аватара для Hollou

Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Iska:
И правильно ли я понял, что копии «Folder1...29» должны создаваться в том же каталоге, что и «Folder0»? »
Совершенное верно. Извините за размывчатую формулировку вопросов.

Порядок при переименовании:
Folder0 - копируемая папка
Folder1 - копия папки Folder0
Folder2 - копия папки Folder0
Folder3 - копия папки Folder0
Folder4 - копия папки Folder0
Folder5 - копия папки Folder0
...
Folder29 - копия папки Folder0

Последний раз редактировалось Hollou, 24-02-2012 в 09:14.


Отправлено: 09:08, 24-02-2012 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Hollou, ясно. Попробуйте так:
читать дальше »
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\Catalog\Folder0
set sDestFolder=C:\Catalog
set sExcludeFolder=Parameters

call :GetLastPartName "%sSourceFolder%"

call :GetTemporaryName
>"%TemporaryName%" echo %sSourceFolder%\%sExcludeFolder%

for /l %%i in (1, 1, 29) do (
	xcopy.exe "%sSourceFolder%" "%sDestFolder%\%LastPartName:~0,-1%%%i\" /e /f /h /r /k /y /exclude:%TemporaryName%
	mklink.exe /d "%sDestFolder%\%LastPartName:~0,-1%%%i\%sExcludeFolder%" "%sSourceFolder%\%sExcludeFolder%"
)

>nul del /f /q "%TemporaryName%"

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
:GetLastPartName
    setlocal enableextensions enabledelayedexpansion

    set sLastPart=%~nx1
    set sProcName=%~0

    endlocal & set %sProcName:~4%=%sLastPart%
    exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetTemporaryName()
rem 
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
    setlocal enableextensions enabledelayedexpansion

:NextName
    set sTempName=%temp%\temp%random%.tmp

    if exist "%sTempName%" goto :NextName

    set sProcName=%~0

    endlocal & set %sProcName:~4%=%sTempName%
    exit /b 0
rem ==========================================================================
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:19, 24-02-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование каталога с исключениями и переименованием

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Перемещение файлов с переименованием Unm Скриптовые языки администрирования Windows 1 15-10-2011 12:20
CMD/BAT - копирование файлов удовлетворяющих маске из одного каталога в два других Gablik Скриптовые языки администрирования Windows 5 15-09-2011 15:13
CMD/BAT - [решено] Копирование самого позднего по дате создания каталога. SANIOK_AV Скриптовые языки администрирования Windows 2 04-12-2009 17:29
CMD/BAT - [решено] Поиск каталога и копирование всего его содержимого desk Скриптовые языки администрирования Windows 4 01-07-2009 14:28
Интерфейс - Проблема с переименованием диска evgdlm Microsoft Windows 7 3 08-06-2009 08:11




 
Переход