![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Копирование файлов по дате создания |
|
CMD/BAT - [решено] Копирование файлов по дате создания
|
Новый участник Сообщения: 16 |
Здравствуйте, помогите пожалуйста с батником. Нужно следующие:
Батником про сканировать директорию и скопировать по маске файлы (*.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
|
Профиль | Отправить 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата Syna:
Удалите этот ключ или избавляйтесь от таких папок при обработке, первое предпочтительнее. |
|
Отправлено: 12:00, 12-12-2012 | #12 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать а как сделать чтобы он искал в под папках тоже?
|
Отправлено: 12:42, 12-12-2012 | #13 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Копировать их с перезаписью.
Все, вроде работает, так как надо. Спасибо, за помощь и терпение. ![]() ![]() |
Отправлено: 13:37, 12-12-2012 | #15 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Здравствуйте, gora. Тут возникла еще одна необходимость в этом скрипте.
например- в папке folder есть еще одна папка, назовем ее log, так вот нужно что бы при сканировании, если есть файлы с расширением, которые у нас указанны в скрипте выше - не копировались. т.е. простым языком не проверялась папка log вообще. Если есть возможность, помоги плиз. Спасибо. |
Отправлено: 12:08, 13-12-2012 | #16 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Спасибо, большое.
|
Отправлено: 05:47, 14-12-2012 | #18 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Здравствуйте, возникла еще одна проблемка, нужно в этом коде еще добавить в исключение файлы что бы они не копировались.
Например: файл qwe00001.txt, в файле меняются только первые три буквы, т.е. не нужно копировать файлы по маске "*00001.txt" Спасибо. Цитата gora:
|
|
Отправлено: 05:03, 24-12-2012 | #19 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить 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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания) | 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 |
|