![]() |
Копирование файлов по дате создания
Здравствуйте, помогите пожалуйста с батником. Нужно следующие:
Батником про сканировать директорию и скопировать по маске файлы (*.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!] ) Заранее, спасибо. |
Syna, так?
Код:
@Echo Off |
Код:
@Echo Off |
Спасибо, "gora", то что нужно, если не трудно, можешь еще в этот скрипт дописать следующие:
нужно копировать эти файлы только, если они меньше даты создания файла. Например: файл создан 12.12.2012 его копировать не надо, если файл создан 06.12.2012 его надо уже копировать, т.е. интервал -5 дней. Еще раз, огромное спасибо. |
Код:
@Echo Off |
Спасибо, огромное, gora. Выручил. Респект тебе. :clapping:
|
Сегодня только толком просмотрел батник, прошу прощения за тупой вопрос. Скажи, пожалуйста, какую переменную брать для копирования старых файлов? Спасибо.
|
Напишите в этой строке путь для копирования (Вы его не указали в первом сообщении):
Код:
If %YYYY%%MM%%DD% GTR !dat! (Copy "%folder%\!name!" "Path for old files") |
.
Цитата:
Now 12 12 2012 Old 07 12 2012 Непредвиденное появление: /12)*12 If %YYYY%%MM%%DD% GTR !dat! (Copy "%folder%\!name!" "%folder1%") |
Цитата:
2 Попробуйте еще раз скопировать скрипт из поста 5 и не меняйте в нем ни чего кроме строки Код:
Set folder=e:\Temp 3 Приведите здесь путь к этой папке. 4 Покажите вывод скрипта здесь в тегах code 5 Если скрипт продолжает выдавать ошибку, то повторите пп 2-4 для скрипта из поста 3. 6 Приведите значение переменной "%folder1%" 7 Проверьте Ваши пути и имена обрабатываемых файлов на отсутствие спец. символов в них. |
Отображается все как надо, а вот кода меня строку выдает ошибку (Непредвиденное появление: /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 |
Цитата:
Удалите этот ключ или избавляйтесь от таких папок при обработке, первое предпочтительнее. |
а как сделать чтобы он искал в под папках тоже?
|
Syna, встречный вопрос: что Вы собираетесь делать, если в подпапках встретятся одноименные файлы? Копировать их с перезаписью или опять будет новая вводная? :dont-know
Код:
@Echo Off |
Копировать их с перезаписью.
Все, вроде работает, так как надо. Спасибо, за помощь и терпение. :) :up |
Здравствуйте, gora. Тут возникла еще одна необходимость в этом скрипте.
например- в папке folder есть еще одна папка, назовем ее log, так вот нужно что бы при сканировании, если есть файлы с расширением, которые у нас указанны в скрипте выше - не копировались. т.е. простым языком не проверялась папка log вообще. Если есть возможность, помоги плиз. Спасибо. |
Код:
@Echo Off |
Спасибо, большое.
|
Здравствуйте, возникла еще одна проблемка, нужно в этом коде еще добавить в исключение файлы что бы они не копировались.
Например: файл qwe00001.txt, в файле меняются только первые три буквы, т.е. не нужно копировать файлы по маске "*00001.txt" Спасибо. Цитата:
|
Код:
@Echo Off |
Спасибо, дружище. :clapping: :up
|
С новым годом, gora. Возникла проблема со скриптом, не переходит на следующий год 2013. Отсчитывает с 31,12,2012, а не с текущей даты.
Что нужно поменять? Спасибо. Код: :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 |
Код:
@Echo Off |
Спасибо. :)
|
Теперь другой глюк у него, ставлю копировать файлы старше 5 дней, он копирует только те файлы у которых дата создания в этом году, а у которых дата создания файла 2012 года, он их не копирует. Он файлы эти видит, дату определяет их, но не копирует. :(
|
Цитата:
Замените одну строку: Код:
If %YYYY%%MM%%DD% GTR !dat! (Echo Copy !dat! !sub!\!name!) Else Echo Not copy !dat! !sub!\!name! Код:
If %YYYY%%MM%%DD% GTR !dat! ( |
Все, нашел косяк. Спасибо.
|
Доброго времени суток! Есть скрипт который перемещает файлы с одной папки в другую и там уже сортирует их по дате создания Подскажите, что можно сделать с этим скриптом, чтобы он делал все тоже самое, только создавал папку на день раньше чем исходный файл для перемещения? т.е. отслеживал дату создания файла и помещал его в папку с датой раньше на один день.
move "c:\Other\*.*" "c:\Other2\" @Echo OFF&Chcp 866>Nul Set $SCR="c:\Other2\*.*" for %%a in (%$SCR%) do ( for /f "tokens=1-3 delims=/-:., " %%c in ( "%%~ta" ) do MD "%%~dpa%%e_%%d_%%c" 2>Nul&Move "%%a" "%%~dpa%%e_%%d_%%c") |
Время: 11:14. |
Время: 11:14.
© OSzone.net 2001-