|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 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 | |
|