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

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

Ответить
Настройки темы
CMD/BAT - [решено] Копирование одной папки\файла в разные папки с контролем заполняемости

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


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

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


Здравствуйте. Задача такая: Есть папка\файл которую нужно скопировать в архивную папку, но архивных папок 2-е, и они на разных дисках. Я могу сделать такую копию, но папка будет копироваться сразу в 2-е папки, а мне нужно, что бы папка копировалась с начало в одну папку, а при заполнении её копировалось во второю, при этом работал скрипт по контролю количества папок, и старые удалялись.
Пример того что у меня получилось:

setlocal enableextensions enabledelayedexpansion
set sFolder=P:\копии
set eFolder=P:\"новая папка1"
set /a iCount = 2
for %%d in (P:\копии\%time:~0,2%.%time:~3,2%,O:\копии\%time:~0,2%.%time:~3,2%) do echo d | xcopy /E /H /R /K /Y /D /C /Q %eFolder% %%d
for /f "skip=%iCount% usebackq delims=" %%i in (`dir /b /a:d /o:-d /t:w "%sFolder%"`) do rd /s /q "%sFolder%\%%~i"
for /f "skip=%iCount% usebackq delims=" %%i in (`dir /b /a:d /o:-d /t:w "O:\копии"`) do rd /s /q "O:\копии\%%~i"
endlocal
exit /b 0

При этом они копируются сразу в 2-е папки, и контроль заполнения тоже одновременно в 2-х папках, т.е. он не берёт с начало первую паку, копирует в неё 2-е папки, потом во вторую ещё 2-е папки, а потом опять в 1-ю.

Можно сделать и на основе robocopy.

Отправлено: 18:35, 13-09-2020

 

Ветеран


Contributor


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

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


михаилНезнайка, В архивные папки копируются папки? Их имена разные или Вы переименовываете их при копировании? По какому принципу создаются их имена?
Сначала Вы делаете копии в первую папку. Она заполнилась (?), копируем во вторую, и она заполнилась. Что дальше? В первую папку -по какому принципу она очищается?
И вообще, в чем смысл такого копирования? Почему бы не копировать папки попеременно в первый и второй архив, тогда на обоих дисках будем иметь сравнительно свежие копии, а не так, как Вы предлагаете: на одном диске свежие, на другом заведомое старье

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 14-09-2020 в 09:33.


Отправлено: 09:23, 14-09-2020 | #2



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

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


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


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

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


"В архивные папки копируются папки?" Да копируются папки.
"Их имена разные или Вы переименовываете их при копировании?" Можно предопределить сразу их имена, но в моём случае они создаются при копировании
"По какому принципу создаются их имена?" Это не имеет значения, можно задать имена сразу, либо как у меня, называются при копировании "время их создания"
"Сначала Вы делаете копии в первую папку. Она заполнилась (?), копируем во вторую, и она заполнилась. Что дальше? В первую папку -по какому принципу она очищается?" Дальше по логике моего скрипта, он удаляет самую струю копию (или в первой папке или во второй) и закидывает туда копию сделанную сегодня.
"И вообще, в чем смысл такого копирования?" Смысл в том, что есть два логических диска по 400Гб, и нужно копировать архив в эти папки. Но мне не нужно создавать копии сразу в двух папках, а сначала копировалось в одну, потом при заполнении во вторую, потом при заполнении опять в первую. Это для того, что бы не объединять эти два логических диска в один диск в 800Гб.

Отправлено: 13:44, 14-09-2020 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Принцип примерно такой:

Powershell:
Код: Выделить весь код
$sourceFolder = "E:\ISO\2019"
$sourceSize = (dir "$sourceFolder" -Recurse -File |measure -sum Length).sum
$volume1Space = (get-volume -DriveLetter F).sizeremaining
$volume2Space = (get-volume -DriveLetter G).sizeremaining

if ($volume1Space -gt $sourcesSize) { "Копия в первую папку" }
elseif ($volume2Space -gt $sourcesSize) { "Копия во вторую папку" }
else { "Места нигде нет, примите меры!" }

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:34, 14-09-2020 | #4


Ветеран


Contributor


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

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


Запускать не чаще 1 раза в 10 мин
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"

	Set "Arc1=Z:\Box_Arc\Arc1"
	Set /A NArc1=3

	Set "Arc2=Z:\Box_Arc\Arc2"
	Set /A NArc2=3
	
	Call :Count "%Arc1%" "iArc1" "tArc1" "oArc1"
	Call :Count "%Arc2%" "iArc2" "tArc2" "oArc2"

	Set "Arc=%Arc1%"
	Set "oArc=%oArc1%"
	Set /A iArc=%iArc1%
	Set /A NArc=%NArc1%

	If %iArc1% GEQ %NArc1% If %iArc2% LSS %NArc2% Set /A tArc2=0
	If %tArc2% LSS %tArc1% (
		Set "Arc=%Arc2%"
		Set "oArc=%oArc2%"
		Set /A iArc=%iArc2%
		Set /A NArc=%NArc2%
	)

	If %iArc% GEQ %NArc% Rd /Q /S "%oArc%"

	FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "TDate=%%d"
	For %%i In ("%BoxIn%") Do XCopy /E /H /R /K /Y /D /C /Q "%BoxIn%" "%Arc%\%TDate:~0,14%_%%~nxi\"
pause
Exit /B

:Count
SetLocal
rem	Set "Val=CreationDate"
	Set "Val=LastModified"

	2>nul MD %1

	Set /A N=0, DT=900000000 &Set "Old= "
	FOR /F "usebackq delims=" %%d IN (`2^>nul Dir %1 /B /A:D /O:-D /T:C`) DO (
		Call Set /A N+=1
		Set "Old=%~1\%%d"
	)
	If "%N%"=="0" EndLocal &(Set /A %~2=0, %~3=900000000 &Set "%~4=" &Exit /B 0) 
 	FOR /F "tokens=1,2 delims== " %%i IN ('"WMIC FSDIR WHERE name="%Old:\=\\%" get %Val% /format:Textvaluelist"') DO If /I "%%i"=="%Val%" Set "DT=%%j"
	Set /A DT=%DT:~2,9%
EndLocal &(Set /A %~2=%N%, %~3=%DT% &Set "%~4=%Old%")
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 18:00, 14-09-2020 | #5


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


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

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


Спасибо. Всё сработало.

Отправлено: 12:23, 21-09-2020 | #6



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Копирование файла из одной папки в другую в определенные интервалы времени (bat) pinguindell Скриптовые языки администрирования Windows 16 11-08-2019 22:03
CMD/BAT - Нужен батник копирование определенного файла с одной папки в другую seinaro Скриптовые языки администрирования Windows 3 03-03-2016 18:41
CMD/BAT - Копирование файлов в папки по маске файла и маске папки (BAT) skyskiff Скриптовые языки администрирования Windows 7 20-09-2015 22:41
CMD/BAT - Копирование файлов в 2 разные папки (bat) Kenwood Скриптовые языки администрирования Windows 20 06-02-2014 16:41
CMD/BAT - [решено] Перемещение файлов из одной папки в разные в зависимости от имени файла Sarge81 Скриптовые языки администрирования Windows 4 20-09-2011 04:20




 
Переход