![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перенос файлов из папки в папку по дате создания |
|
|
CMD/BAT - [решено] Перенос файлов из папки в папку по дате создания
|
Новый участник Сообщения: 6 |
Доброго времени, подскажите с кодом:
Задача, в папке C:\In\ есть много папок с файлами, необходимо перенести папки с файлами старше 14 дней в папку C:\Old\ Нашёл два скрипта: один просто переносит всё из папки 1 в папку 2, он рабочий: @echo off set In=D:\0\1 set Out=D:\0\2 echo %%j :start for /f "delims=" %%a in ('dir "%In%\*.*" /b/s 2^>nul') do move /y "%%a" "%Out%" @Echo Off SetLocal EnableDelayedExpansion Set folder=D:\0\1 Set old=5 For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set tim=%%i Set YYYY=%tim:~0,4%&Set MM=%tim:~4,2%&Set DD=%tim:~6,2% ::Call :formatMM_DD Echo Now %DD% %MM% %YYYY% Call :GetOldDate %old% Echo Old %DD% %MM% %YYYY% For /F "delims=" %%a In ('dir /A:-D /T:C /O:D "%folder%" ^| Findstr /E /c:".txt" /c:".xml"') Do ( Set ta=%%a Set name=!ta:~36!& Set dat=!ta:~6,4!!ta:~3,2!!ta:~0,2! If %YYYY%%MM%%DD% GTR !dat! (Echo Copy !dat! %folder%\!name!) Else Echo Not copy !dat! %folder%\!name! ) Pause Exit :GetOldDate Set /A DD-=%1 If %DD% GTR 0 GoTo formatMM_DD Set /A MM=MM+11-((MM+10)/12)*12 If %MM%==12 Set /A YYYY-=1 For /F "Tokens=%MM%" %%i In ("31 28 31 30 31 30 31 31 30 31 30 31") Do Set X=%%i If %MM%==2 ( Set /A B1=YYYY%%4, B2=YYYY%%100, B3=YYYY%%400 If !B1!==0 If Not !B2!==0 Set /A X+=1 If !B3!==0 Set /A X+=1 ) Set /A DD=DD+X-((DD+X-1)/X)*X :formatMM_DD Set MM=0%MM%&Set DD=0%DD% Set MM=%MM:~-2%&Set DD=%DD:~-2% GoTo :EOF |
|
Отправлено: 14:36, 14-05-2020 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата valedol_z@vk:
Цитата valedol_z@vk:
или дата относится все же к папке и надо переносить папку с места на место, но и в таком случае ее дата создания изменится на текущую, хотя может это и неважно, это не указано пока нигде. |
||
Отправлено: 17:23, 14-05-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Копирование/удаление по дате изменения файлов.
@Echo Off
cls
Set /A DeltaDay=-14
Set "BoxIn=D:\Box_In\*.*"
Set "BoxOut=D:\Box_Arc"
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "@Tdate=%%d" &Call Set "@Tdate=%%@Tdate:~6,2%%.%%@Tdate:~4,2%%.%%@Tdate:~0,4%%"
Call :FromDate -14 %@Tdate% "yyyymmdd"
Del "%BoxIn%\desktop.ini" /S /A
Pushd "%BoxOut%" &&(
>"Exclude.tmp" Xcopy "%BoxIn%" "%BoxOut%" /D:%yyyymmdd:~4,2%-%yyyymmdd:~6,2%-%yyyymmdd:~0,4% /S /Y /L
For /F "usebackq delims=" %%f In (`Xcopy "%BoxIn%" "%BoxOut%" /S /Y /F /EXCLUDE:Exclude.tmp`) Do (
Set "Out=%%f"
Call :ReMove "%%Out: -> =" "%%"
)
Del "%BoxOut%\Exclude.tmp"
FOR /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxIn%" /S /B /A:D ^|Sort /R`) DO 2>nul Rd "%%d"
)
pause
Exit /B
:ReMove
If Exist "%~2" Del %1
Exit /B
:FromDate
rem Пересчет даты на заданное кол-во дней
rem В первом аргументе +- дни
rem Во втором аргументе дата в формате dd.mm.yyyy
rem В третем аргументе имя переменной в кавычках где получим новую дату в формате yyyymmdd
rem Заимствовано http://forum.oszone.net/thread-186889.html
rem вызов Call :FromNow %DeltaDay% %Date% "yyyymmdd"
rem результат в перемменной %yyyymmdd%
SetLocal
Set "DT=%~2"
Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100
Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
Set /A J=J+2-12*L,I=100*(N-49)+I+L
Set /A yyyy=I,mm=100+J,dd=100+K
EndLocal& Set "%~3=%yyyy%%mm:~-2%%dd:~-2%"
GoTo :Eof
|
------- Последний раз редактировалось megaloman, 20-05-2020 в 09:40. Отправлено: 20:34, 14-05-2020 | #3 |
Новый участник Сообщения: 6
|
Профиль | Сайт | Отправить PM | Цитировать Цитата alpap:
Есть папка 1 в ней папки с файлами, и просто файлы, необходимо все папки и файлы старше 14 дней перенести из этой папки в папку 2. Если в папке будут файлы не входящие в диапазон, то оставлять. |
|
Отправлено: 08:12, 19-05-2020 | #4 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать valedol_z@vk,
т.е. если в подпапке1: "C:\1\подпапка1" будет 10 файлов старше 14 дней и хотя бы один файл менее 14, то такую папку ("C:\1\подпапка1") уже не трогаем, так? Цитата valedol_z@vk:
|
||
Отправлено: 13:30, 19-05-2020 | #5 |
Новый участник Сообщения: 6
|
Профиль | Сайт | Отправить PM | Цитировать Цитата alpap:
По поводу megaloman , файлы он перекинул вместе с папками, но папки оставил. скорее всего из-за того что я их туда перенёс раньше, хотя дата создания показывает старое число. |
|
Отправлено: 07:42, 20-05-2020 | #6 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать valedol_z@vk,
Цитата:
|
|
------- Последний раз редактировалось megaloman, 20-05-2020 в 08:06. Отправлено: 07:52, 20-05-2020 | #7 |
Новый участник Сообщения: 6
|
Профиль | Сайт | Отправить PM | Цитировать Там остались файлы desktop.ini они создались после отработки bat файла.
|
Отправлено: 08:09, 20-05-2020 | #8 |
Новый участник Сообщения: 6
|
Профиль | Сайт | Отправить PM | Цитировать Вот оставшийся файл
|
Отправлено: 08:13, 20-05-2020 | #9 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Цитата:
|
|
------- Отправлено: 08:13, 20-05-2020 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Разложить файлы в папки по дате создания | surgutfred | Скриптовые языки администрирования Windows | 7 | 12-03-2024 16:22 | |
CMD/BAT - Сортирование файлов по папкам (копирование в многоуровневые папки по дате создания) | Systems | Скриптовые языки администрирования Windows | 18 | 03-10-2014 11:37 | |
CMD/BAT - [решено] Копирование файлов по дате создания | Syna | Скриптовые языки администрирования Windows | 27 | 23-05-2013 14:02 | |
CMD/BAT - Переименование группы файлов по дате создания | Serg2010 | Скриптовые языки администрирования Windows | 8 | 14-04-2012 00:40 | |
Переименование группы файлов по дате создания | Serg2010 | AutoIt | 1 | 10-04-2012 10:25 |
|