CMD/BAT - [решено] Копирование каталога с исключениями и переименованием
-
Hollou
CMD/BAT - [решено] Копирование каталога с исключениями и переименованием
Добрый день.
Нужно скопировать содержимое каталога (Папка0) за исключением одной папки (из-за её большого веса), при этом каждая новая копия этого каталога должна переименовываться (Папка1-Папка2-ПапкаN, всего 29 копий) и создать для копий основного каталога символическую ссылку на исключенную из копирования папку (название не меняется), находящуюся в оригинальном каталоге (Папка0).
Можно, конечно, собрать все расширения и названия папок, имеющихся в каталоге, и использовать множество повторяющихся команд, но должно быть более элегантное решение.
И ещё в вдогонку: нужно скопировать каталог (Папка0) с переименованием каждой новой копии (Папка1-Папка2-ПапкаN, всего 29 копий).
Помогите, пожалуйста, реализовать это любым работающим способом.
Нужно скопировать содержимое каталога (Папка0) за исключением одной папки (из-за её большого веса), при этом каждая новая копия этого каталога должна переименовываться (Папка1-Папка2-ПапкаN, всего 29 копий) и создать для копий основного каталога символическую ссылку на исключенную из копирования папку (название не меняется), находящуюся в оригинальном каталоге (Папка0).
Можно, конечно, собрать все расширения и названия папок, имеющихся в каталоге, и использовать множество повторяющихся команд, но должно быть более элегантное решение.
И ещё в вдогонку: нужно скопировать каталог (Папка0) с переименованием каждой новой копии (Папка1-Папка2-ПапкаN, всего 29 копий).
Помогите, пожалуйста, реализовать это любым работающим способом.
-
Iska
Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием
Цитата Hollou:
скопировать содержимое каталога (Папка0)
Куда конкретно скопировать?
Цитата Hollou:
всего 30 копий
Что потом, после 30, делать?
Попробуйте так:
Код:
где: «sSourceFolder» — откуда копировать («Папка0»), «sDestFolder» — куда копировать, sExcludeFolder — имя исключаемой папки («за исключением одной папки»). Поправьте на свои данные и пробуйте, не забывая, что после двенадцати часов карета превратится … после 30 запусков поведение пакетного файла будет непредсказуемым.
скопировать содержимое каталога (Папка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 - [решено] Копирование каталога с исключениями и переименованием
C:\Catalog - каталог
C:\Catalog\Folder0 - папка, которую нужно размножить 29 раз в каталоге, исключив при этом подпапку с большим весом, и для копий создав символические ссылки на исключенную папку
C:\Catalog\Folder0\Parameters - папка с большим весом, на которую нужно создать символическую ссылку в каждой копии Folder1-29
C:\Catalog\Folder1...29 - копии папки Folder0
Скоро опробую ваш вариант.
C:\Catalog\Folder0 - папка, которую нужно размножить 29 раз в каталоге, исключив при этом подпапку с большим весом, и для копий создав символические ссылки на исключенную папку
C:\Catalog\Folder0\Parameters - папка с большим весом, на которую нужно создать символическую ссылку в каждой копии Folder1-29
C:\Catalog\Folder1...29 - копии папки Folder0
Скоро опробую ваш вариант.
-
Hollou
Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием
C:\Catalog - каталог
C:\Catalog\Folder0 - папка, которую нужно размножить 29 раз в каталоге, исключив при этом подпапку с большим весом, и для копий создав символические ссылки на исключенную папку
C:\Catalog\Folder0\Parameters - папка с большим весом, на которую нужно создать символическую ссылку в каждой копии Folder1-29
C:\Catalog\Folder1...29 - копии папки Folder0
Скоро опробую ваш вариант.
C:\Catalog\Folder0 - папка, которую нужно размножить 29 раз в каталоге, исключив при этом подпапку с большим весом, и для копий создав символические ссылки на исключенную папку
C:\Catalog\Folder0\Parameters - папка с большим весом, на которую нужно создать символическую ссылку в каждой копии Folder1-29
C:\Catalog\Folder1...29 - копии папки Folder0
Скоро опробую ваш вариант.
-
Iska
Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием
Hollou, озвучьте конечную цель Ваших действий.
-
Iska
Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием
Из каждой скопированной папки Folder1...29 запускается приложение, которому нужны файлы папки Parameters, находящейся в папке Folder0 (файлов очень много, разных расширений, под 100 Гб). Предоставить эти файлы для каждой копии не представляется возможным, поэтому нужна символическая ссылка - так у каждой копии будет папка Parameters. Копировать и переименовывать папку Folder0, а так же создавать ссылки в ручную - слишком долго.
Не так объяснил? Извините, если что.
Не так объяснил? Извините, если что.
-
Iska
Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием
Цитата Iska:
Hollou, действие по созданию тридцати копий папки «Folder0» — однократное?
Да.
Hollou, действие по созданию тридцати копий папки «Folder0» — однократное?
CMD/BAT - [решено] Копирование каталога с исключениями и переименованием
Да.
-
Iska
Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием
И правильно ли я понял, что копии «Folder1...29» должны создаваться в том же каталоге, что и «Folder0»?
-
Iska
Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием
Цитата Iska:
И правильно ли я понял, что копии «Folder1...29» должны создаваться в том же каталоге, что и «Folder0»?
Совершенное верно. Извините за размывчатую формулировку вопросов.
Порядок при переименовании:
Folder0 - копируемая папка
Folder1 - копия папки Folder0
Folder2 - копия папки Folder0
Folder3 - копия папки Folder0
Folder4 - копия папки Folder0
Folder5 - копия папки Folder0
...
Folder29 - копия папки Folder0
И правильно ли я понял, что копии «Folder1...29» должны создаваться в том же каталоге, что и «Folder0»?
CMD/BAT - [решено] Копирование каталога с исключениями и переименованием
Совершенное верно. Извините за размывчатую формулировку вопросов.
Порядок при переименовании:
Folder0 - копируемая папка
Folder1 - копия папки Folder0
Folder2 - копия папки Folder0
Folder3 - копия папки Folder0
Folder4 - копия папки Folder0
Folder5 - копия папки Folder0
...
Folder29 - копия папки Folder0
-
Iska
Re: CMD/BAT - [решено] Копирование каталога с исключениями и переименованием
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 ==========================================================================