|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование одной папки\файла в разные папки с контролем заполняемости |
|
CMD/BAT - [решено] Копирование одной папки\файла в разные папки с контролем заполняемости
|
Новый участник Сообщения: 3 |
Здравствуйте. Задача такая: Есть папка\файл которую нужно скопировать в архивную папку, но архивных папок 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 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать михаилНезнайка, В архивные папки копируются папки? Их имена разные или Вы переименовываете их при копировании? По какому принципу создаются их имена?
Сначала Вы делаете копии в первую папку. Она заполнилась (?), копируем во вторую, и она заполнилась. Что дальше? В первую папку -по какому принципу она очищается? И вообще, в чем смысл такого копирования? Почему бы не копировать папки попеременно в первый и второй архив, тогда на обоих дисках будем иметь сравнительно свежие копии, а не так, как Вы предлагаете: на одном диске свежие, на другом заведомое старье |
------- Последний раз редактировалось megaloman, 14-09-2020 в 09:33. Отправлено: 09:23, 14-09-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать "В архивные папки копируются папки?" Да копируются папки.
"Их имена разные или Вы переименовываете их при копировании?" Можно предопределить сразу их имена, но в моём случае они создаются при копировании "По какому принципу создаются их имена?" Это не имеет значения, можно задать имена сразу, либо как у меня, называются при копировании "время их создания" "Сначала Вы делаете копии в первую папку. Она заполнилась (?), копируем во вторую, и она заполнилась. Что дальше? В первую папку -по какому принципу она очищается?" Дальше по логике моего скрипта, он удаляет самую струю копию (или в первой папке или во второй) и закидывает туда копию сделанную сегодня. "И вообще, в чем смысл такого копирования?" Смысл в том, что есть два логических диска по 400Гб, и нужно копировать архив в эти папки. Но мне не нужно создавать копии сразу в двух папках, а сначала копировалось в одну, потом при заполнении во вторую, потом при заполнении опять в первую. Это для того, что бы не объединять эти два логических диска в один диск в 800Гб. |
Отправлено: 13:44, 14-09-2020 | #3 |
fascinating rhythm Сообщения: 6626
|
Профиль | Отправить 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 { "Места нигде нет, примите меры!" } |
------- Отправлено: 14:34, 14-09-2020 | #4 |
Ветеран Сообщения: 2728
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Спасибо. Всё сработало.
|
Отправлено: 12:23, 21-09-2020 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|