Имя пользователя:
Пароль:
 | Правила  

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

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

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


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

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


Доброго времени, подскажите с кодом:
Задача, в папке 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%"
А второй код просто копирует файлы, но не папки старше 5 дней, пытался поправить под свои нужды но не хватает соображалки.
Код: Выделить весь код
@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
Благодарности: 564

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


Цитата valedol_z@vk:
Перенос файлов из папки в папку по дате создания »
Цитата valedol_z@vk:
второй код просто копирует файлы, но не папки »
если нужны именно файлы, то что делать если в папке будут файлы не входящие в диапазон (папки с файлами старше 14 дней), не трогать такую папку или выбирать оттуда необходимые файлы, создавать в новом месте папку с таким же именем и помещать их туда, но при таком действии подозреваю дата создания поменяется на текущую.
или дата относится все же к папке и надо переносить папку с места на место, но и в таком случае ее дата создания изменится на текущую, хотя может это и неважно, это не указано пока нигде.
Это сообщение посчитали полезным следующие участники:

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



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

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


Ветеран


Contributor


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

Профиль | Отправить 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
Благодарности: 0

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


Цитата alpap:
если нужны именно файлы, то что делать если в папке будут файлы не входящие в диапазон (папки с файлами старше 14 дней), не трогать такую папку или выбирать оттуда необходимые файлы, создавать в новом месте папку с таким же именем и помещать их туда, но при таком действии подозреваю дата создания поменяется на текущую.
или дата относится все же к папке и надо переносить папку с места на место, но и в таком случае ее дата создания изменится на текущую, хотя может это и неважно, это не указано пока нигде. »
Папки переносятся вместе с файлами,
Есть папка 1 в ней папки с файлами, и просто файлы, необходимо все папки и файлы старше 14 дней перенести из этой папки в папку 2. Если в папке будут файлы не входящие в диапазон, то оставлять.

Отправлено: 08:12, 19-05-2020 | #4


Ветеран


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

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


valedol_z@vk,
т.е. если в подпапке1: "C:\1\подпапка1" будет 10 файлов старше 14 дней и хотя бы один файл менее 14, то такую папку ("C:\1\подпапка1") уже не трогаем, так?
Цитата valedol_z@vk:
Если в папке будут файлы не входящие в диапазон, то оставлять »
кстати что по коду megaloman, пробовали, легче будет понять что вам надо.

Отправлено: 13:30, 19-05-2020 | #5


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


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

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


Цитата alpap:
т.е. если в подпапке1: "C:\1\подпапка1" будет 10 файлов старше 14 дней и хотя бы один файл менее 14, то такую папку ("C:\1\подпапка1") уже не трогаем, так? »
Да всё верно, в папке может быть файл который правили вот недавно значит он ещё нужен.

По поводу megaloman , файлы он перекинул вместе с папками, но папки оставил. скорее всего из-за того что я их туда перенёс раньше, хотя дата создания показывает старое число.

Отправлено: 07:42, 20-05-2020 | #6


Ветеран


Contributor


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

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


valedol_z@vk,
Цитата:
папки оставил
- значит, они не пустые. Остались файлы, не входящие в указанный диапазон по дате изменения, либо подпапки, либо они чем-то заняты, например, открыты другой программой (например, total comander, far). Пустые папки должны были удалиться. Скрипт никак не анализирует даты создания/изменения папок, только дату изменения файлов. Что не устраивает?

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


Последний раз редактировалось megaloman, 20-05-2020 в 08:06.


Отправлено: 07:52, 20-05-2020 | #7


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


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

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


Там остались файлы desktop.ini они создались после отработки bat файла.

Отправлено: 08:09, 20-05-2020 | #8


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


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

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


Изображения
Тип файла: png Снимок.PNG
(5.1 Kb, 11 просмотров)

Вот оставшийся файл

Отправлено: 08:13, 20-05-2020 | #9


Ветеран


Contributor


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

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


Цитата:
desktop.ini они создались после отработки bat файла.
После отработки bat файла desktop.ini не создаются, они там были до того

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

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

Отправлено: 08:13, 20-05-2020 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход