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

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

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

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


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


Конфигурация

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


Здравствуйте, помогите пожалуйста с батником. Нужно следующие:
Батником про сканировать директорию и скопировать по маске файлы (*.xml и *.txt) и дате создания, именно по созданию не по изменению файла.
Все что я сделал, это про сканировал директорию и вывел дату создания, а как ее привязать к файлам не знаю.
Вот скрипт:

@echo off
SetLocal EnableExtensions
setlocal enableDelayedExpansion

FOR /r "D:\Din" %%f IN (*.*) do (
set nm=%%f
@for /f %%i in ('dir "!nm!" /O:D /A:-D /tc ^| findstr "^[0-9]*\."') do set g=%%i

echo %%f [!g!]

)

Заранее, спасибо.

Отправлено: 11:59, 10-12-2012

 

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


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

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


Отображается все как надо, а вот кода меня строку выдает ошибку (Непредвиденное появление: /12)*12 »).

1. Windows 7 Pro x32
2.
Now 12 12 2012
Old 07 12 2012
Not copy 20121212 D:\11\iperf.exe
Not copy 20121212 D:\11\log.txt
Для продолжения нажмите любую клавишу....

3.Откуда - Set folder=D:\11
куда- Set folder1=D:\22

КОД:
@Echo Off
SetLocal EnableDelayedExpansion
Set folder=D:\11
Set folder1=D:\22
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 /s /A:-D /T:C /O:D "%folder%" ^| Findstr /E /c:".txt" /c:".exe"') 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! (Copy %folder%\!name! %folder1%)

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

Отправлено: 11:32, 12-12-2012 | #11



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

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


Аватара для gora

Ушёл из жизни


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

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


Цитата Syna:
For /F "delims=" %%a In ('dir /s /A:-D /T:C /O:D "%folder%" ^| Findstr /E /c:".txt" /c:".exe"') Do ( »
Вы добавили рекурсию и ни чего об этом не сказали. В первом посте про нее тоже нет ни слова. С этим ключом вывод Dir меняется и парсер вывода может неправильно работать, если одна из вложенных папок будет кончаться на .txt или на .exe
Удалите этот ключ или избавляйтесь от таких папок при обработке, первое предпочтительнее.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:00, 12-12-2012 | #12


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


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

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


а как сделать чтобы он искал в под папках тоже?

Отправлено: 12:42, 12-12-2012 | #13


Аватара для gora

Ушёл из жизни


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

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


Syna, встречный вопрос: что Вы собираетесь делать, если в подпапках встретятся одноименные файлы? Копировать их с перезаписью или опять будет новая вводная?

Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
Set folder=e:\Temp\3 3
Set folder1=e:\Temp\222
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%
Echo Now	%DD% %MM% %YYYY%
Call :GetOldDate %old%
Echo Old	%DD% %MM% %YYYY%

For /R "%folder%" %%s In (.) Do (
	Set ts=%%s
	Set sub=!ts:~0,-2!
	For /F "delims=" %%a In ('dir /A:-D /T:C /O:D "!sub!" 2^>Nul ^| Findstr /E /c:".txt" /c:".exe"') Do (
		Set ta=%%a
		If Not "!ta:~0,1!"==" " (
			Set name=!ta:~36!& Set dat=!ta:~6,4!!ta:~3,2!!ta:~0,2!
			If %YYYY%%MM%%DD% GTR !dat! (Echo Copy	!dat!	!sub!\!name!) Else Echo Not copy !dat!	!sub!\!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
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:29, 12-12-2012 | #14


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


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

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


Копировать их с перезаписью.

Все, вроде работает, так как надо. Спасибо, за помощь и терпение.

Отправлено: 13:37, 12-12-2012 | #15


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


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

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


Здравствуйте, gora. Тут возникла еще одна необходимость в этом скрипте.
например- в папке folder есть еще одна папка, назовем ее log, так вот нужно что бы при сканировании, если есть файлы с расширением, которые у нас указанны в скрипте выше - не копировались. т.е. простым языком не проверялась папка log вообще.
Если есть возможность, помоги плиз.
Спасибо.

Отправлено: 12:08, 13-12-2012 | #16


Аватара для gora

Ушёл из жизни


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

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


Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
Set folder=e:\Temp 1\222
Set folder1=e:\Temp 1\2
Set old=5
Set exc=log

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%
Echo Now	%DD% %MM% %YYYY%
Call :GetOldDate %old%
Echo Old	%DD% %MM% %YYYY%

For /R "%folder%" %%s In (.) Do (
	Set ts=%%s
	Set sub=!ts:~0,-2!
rem	Echo == %%~nxs == !sub! ==
	If Not "%%~nxs"=="%exc%" If "!sub!"=="!sub:\%exc%\=!" (
		For /F "delims=" %%a In ('dir /A:-D /T:C /O:D "!sub!" 2^>Nul ^| Findstr /E /c:".txt" /c:".exe"') Do (
			Set ta=%%a
			If Not "!ta:~0,1!"==" " (
				Set name=!ta:~36!& Set dat=!ta:~6,4!!ta:~3,2!!ta:~0,2!
				If %YYYY%%MM%%DD% GTR !dat! (Echo Copy	!dat!	!sub!\!name!) Else Echo Not copy !dat!	!sub!\!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
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:38, 13-12-2012 | #17


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


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

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


Спасибо, большое.

Отправлено: 05:47, 14-12-2012 | #18


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


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

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


Здравствуйте, возникла еще одна проблемка, нужно в этом коде еще добавить в исключение файлы что бы они не копировались.
Например: файл qwe00001.txt, в файле меняются только первые три буквы, т.е. не нужно копировать файлы по маске "*00001.txt"
Спасибо.

Цитата gora:
Код:
@Echo Off
SetLocal EnableDelayedExpansion
Set folder=e:\Temp 1\222
Set folder1=e:\Temp 1\2
Set old=5
Set exc=log
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%
Echo Now %DD% %MM% %YYYY%
Call :GetOldDate %old%
Echo Old %DD% %MM% %YYYY%
For /R "%folder%" %%s In (.) Do (
Set ts=%%s
Set sub=!ts:~0,-2!
rem Echo == %%~nxs == !sub! ==
If Not "%%~nxs"=="%exc%" If "!sub!"=="!sub:\%exc%\=!" (
For /F "delims=" %%a In ('dir /A:-D /T:C /O:D "!sub!" 2^>Nul ^| Findstr /E /c:".txt" /c:".exe"') Do (
Set ta=%%a
If Not "!ta:~0,1!"==" " (
Set name=!ta:~36!& Set dat=!ta:~6,4!!ta:~3,2!!ta:~0,2!
If %YYYY%%MM%%DD% GTR !dat! (Echo Copy !dat! !sub!\!name!) Else Echo Not copy !dat! !sub!\!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
-------
Мои аддоны | Dropbox »

Отправлено: 05:03, 24-12-2012 | #19


Аватара для gora

Ушёл из жизни


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

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


Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
Set folder=e:\Temp\3 3
Set folder1=e:\Temp\222
Set old=5
:: не обрабатывать папки log любой глубины вложения
Set exc=log
:: не обрабатывать файлы оканчивающиеся на 00001.txt (проверка последних 9 символов имени и расширения файла)
Set n=9
Set excFile=00001.txt

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%
Echo Now	%DD% %MM% %YYYY%
Call :GetOldDate %old%
Echo Old	%DD% %MM% %YYYY%

For /R "%folder%" %%s In (.) Do (
	Set ts=%%s
	Set sub=!ts:~0,-2!
	If /I Not "%%~nxs"=="%exc%" If /I "!sub!"=="!sub:\%exc%\=!" (
		For /F "delims=" %%a In ('dir /A:-D /T:C /O:D "!sub!" 2^>Nul ^| Findstr /I /E /c:".txt" /c:".exe"') Do (
			Set ta=%%a
			If Not "!ta:~0,1!"==" " If /I Not "!ta:~-%n%!"=="%excFile%" (
				Set name=!ta:~36!& Set dat=!ta:~6,4!!ta:~3,2!!ta:~0,2!
				If %YYYY%%MM%%DD% GTR !dat! (Echo Copy	!dat!	!sub!\!name!) Else Echo Not copy !dat!	!sub!\!name!
			)
		)
	)
)
Pause
Exit

Отправлено: 09:36, 24-12-2012 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания) DIMM2005 Программное обеспечение Windows 36 03-01-2020 16:54
CMD/BAT - Изменить функцию сортировки файлов - сортировка дб по дате создания а не изменения dark-------13 Скриптовые языки администрирования Windows 2 04-07-2012 17:55
CMD/BAT - Переименование группы файлов по дате создания Serg2010 Скриптовые языки администрирования Windows 8 14-04-2012 00:40
Переименование группы файлов по дате создания Serg2010 AutoIt 1 10-04-2012 10:25
CMD/BAT - [решено] Копирование самого позднего по дате создания каталога. SANIOK_AV Скриптовые языки администрирования Windows 2 04-12-2009 17:29




 
Переход