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

Аватара пользователя
Hollou

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

Сообщение Hollou »

Добрый день.

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



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



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



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

Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием

Сообщение Iska »

Цитата Hollou:



скопировать содержимое каталога (Папка0)
CMD/BAT - [решено] Копирование каталога с исключениями и переименованием




Куда конкретно скопировать?




Цитата Hollou:



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




Что потом, после 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 запусков поведение пакетного файла будет непредсказуемым.
Аватара пользователя
Hollou

Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием

Сообщение Hollou »

C:\Catalog - каталог

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

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

C:\Catalog\Folder1...29 - копии папки Folder0

Скоро опробую ваш вариант.
Аватара пользователя
Hollou

Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием

Сообщение Hollou »

C:\Catalog - каталог

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

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

C:\Catalog\Folder1...29 - копии папки Folder0

Скоро опробую ваш вариант.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием

Сообщение Iska »

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

Не так объяснил? Извините, если что.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием

Сообщение Iska »

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

Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием

Сообщение Iska »

Цитата Iska:



И правильно ли я понял, что копии «Folder1...29» должны создаваться в том же каталоге, что и «Folder0»?
CMD/BAT - [решено] Копирование каталога с исключениями и переименованием




Совершенное верно. Извините за размывчатую формулировку вопросов.



Порядок при переименовании:

Folder0 - копируемая папка

Folder1 - копия папки Folder0

Folder2 - копия папки Folder0

Folder3 - копия папки Folder0

Folder4 - копия папки Folder0

Folder5 - копия папки Folder0

...

Folder29 - копия папки Folder0
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием

Сообщение Iska »

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 ==========================================================================
Ответить

Вернуться в «Скриптовые языки администрирования Windows»