Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

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

Ответить
Настройки темы
CMD/BAT - Поиск файлов *.cer с заданной датой создания

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


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

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


Всем привет, ребят помогите пожалуйста наваять батник со следующим функционалом.

1) запускаем батник и он просит ввести с клавиатуры дату в формате дд.мм.гг

2) ищет на диске и во всех под каталогах X:\Файлы\Сертификаты\*.cer файлы с расширением *.cer, но на диске X есть под каталоги X:\Файлы\Сертификаты\OLD и X:\Файлы\OLD в них искать не нужно (не нужно искать в папках OLD)

3) выводит список всех найденных файлов *.cer с заданной датой создания

4) и еще хотелось бы что бы русский язык выводился нормально а не иероглифами, потому что сертификаты и пути к ним пишутся на русском языке.

и можно ещё их посчитать,
Например:
Было найдено:
1) X:\Файлы\Сертификаты\Женя\сертификат.cer
2) X:\Файлы\Сертификаты\Маша\ВходБаза.cer
Итого найдено: 2 сертификата.

Я думаю для знающего человека эта задача простая, я к сожалению таким не являюсь.
Спасибо за понимание и помощь)

Отправлено: 17:30, 10-08-2015

 

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


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

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


Georgio, а можешь немного подправить батничек, просто он ищет файлы в папках OLD, а мне там не нужно искать...
у меня много папок с вот такой структурой:
X:\Файлы\Сертификаты\биржа\OLD
X:\Файлы\Сертификаты\торг\OLD
X:\Файлы\Сертификаты\хрень\OLD
и т.д.

Отправлено: 11:22, 12-08-2015 | #11



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

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


Аватара для yurfed

Ветеран


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

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


Альберт_25, может просто в начале батника выставить?
Код: Выделить весь код
chcp 1251
или 866, а ещё, кодировка, в которой записано.
У вас всё на русском. Не понимаю этой тенденции писать имена папок на русском. Хоть это и удобно, но это не правильно.

-------
Хочу ли я - Могу ли я - Говно ли я - Магнолия


Отправлено: 11:41, 12-08-2015 | #12


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


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

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


Elven, спасибо за код, всё заработало)

Цитата Elven:
Код:
@echo off
echo Введите дату в формате DD.MM.YYYY
set /p dt=
pushd="d:\test"
for /f "tokens=4-5" %%b in ('dir /o:d /t:c /a:-d /s *.cer ^| find "%dt%"') do for /f "delims=" %%a in ('dir /a:-d /s /b %%b') do echo %%~fa | find /v /i "old" >> log.txt
pause > NUL
popd
exit /b 0 »
у меня у сертификатов есть дата создания и дата изменения, он ищет по дате создания, а можно поставить что бы он искал по дате последнего изменения?)

Отправлено: 11:53, 12-08-2015 | #13


Аватара для Elven

Ветеран


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

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


Если отдельно то отдельно это то вот здесь
Код: Выделить весь код
dir /o:d /t:c /a:-d /s *.cer
поменять на вот так
Код: Выделить весь код
dir /o:d /t:w /a:-d /s *.cer
А чтобы одновременно... Ну в принципе можно: на пару строчек больше сделать и другие переменные вписать.
Код: Выделить весь код
@echo off
echo Введите дату в формате DD.MM.YYYY
set /p dt=
pushd="d:\test"
echo Дата создания %dt% >> log.txt
for /f "tokens=4-5" %%b in ('dir /o:d /t:c /a:-d /s *.cer ^| find "%dt%"') do for /f "delims=" %%a in ('dir /a:-d /s /b %%b') do echo %%~fa | find /v /i "old" >> log.txt
echo Дата изменения %dt% >> log.txt
for /f "tokens=4-5" %%c in ('dir /o:d /t:w /a:-d /s *.cer ^| find "%dt%"') do for /f "delims=" %%d in ('dir /a:-d /s /b %%c') do echo %%~fd | find /v /i "old" >> log.txt
pause > NUL
popd
exit /b 0

Последний раз редактировалось Elven, 12-08-2015 в 12:03.


Отправлено: 11:57, 12-08-2015 | #14


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


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

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


Цитата Elven:
Вот здесь
Код:
dir /o:d /t:c /a:-d /s *.cer
поменять на вот так
Код:
dir /o:d /t:w /a:-d /s *.cer »
благодарю

Цитата Elven:
@echo off
echo Введите дату в формате DD.MM.YYYY
set /p dt=
pushd="d:\test"
echo Дата создания %dt% >> log.txt
for /f "tokens=4-5" %%b in ('dir /o:d /t:c /a:-d /s *.cer ^| find "%dt%"') do for /f "delims=" %%a in ('dir /a:-d /s /b %%b') do echo %%~fa | find /v /i "old" >> log.txt
echo Дата изменения %dt% >> log.txt
for /f "tokens=4-5" %%c in ('dir /o:d /t:w /a:-d /s *.cer ^| find "%dt%"') do for /f "delims=" %%d in ('dir /a:-d /s /b %%c') do echo %%~fd | find /v /i "old" >> log.txt
pause > NUL
popd
exit /b 0 »
всё классно, но почему то батнику пофиг на дату он выдаёт все файлы с расширением .cer, а мне нужны только те которые изменены в конкретную дату которую я задам

Отправлено: 12:01, 12-08-2015 | #15


Ветеран


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

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


Альберт_25, Делал батник копирования файлов по дате создания - 3дня, может вдохновит на что-нибудь:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
set "qw=%Userprofile%\Desktop\Test"
rem Для изменения у всех файлов даты "модификации" "обращения" [на текущую]
"nircmd" setfiletime "%qw%\*" "" now now
rem Убираем лидирующий "0" из даты, если есть
for /f "tokens=* delims=0" %%d in ("%date%") do (
 set onosdate=%%d
rem Модифицируем дату к виду: "текущая дата-3(дня)"
 for /f "tokens=1-3 delims=.: " %%a in ("!onosdate!") do (
rem У кого английская поменять на %%c%%b%%a
  set sdate=%%a%%b%%c
rem У кого английская %%c%%b
  set dnoa=%%b%%c
  set range=3
  set /a newa=%%a-!range!
rem У кого английская !dnoa!!newa!
  set newsdate=!newa!!dnoa!))
rem Выделяем "дату создания" "имя" и "расширение" файлов (очень важна сортировка по дате и времени, порядок не важен)
for /f "tokens=1-8 delims=.: " %%i in ('dir/a-d/o-d/tc "%qw%"^| findstr/rc:"^[^ ]"') do (
rem У кого английская %%k%%j%%i
 set mydate=%%i%%j%%k
rem Убираем лидирующий "0" из даты, если есть
 for /f "tokens=* delims=0" %%q in ("!mydate!") do (
   set onomydate=%%q
   set "namemydate=%%o.%%p%%q"
rem Сравниваем "имя" "расширение" "заданная дата" = "имя" "расширение" "дата создания" файла
   if "%%o.%%p%newsdate%"=="!namemydate!" (
rem Дальше вольны делать с файлами, что захотим, например:
    copy "%qw%\%%o.%%p" "%Userprofile%\Desktop\Folder\")))
exit
.

nircmd надо скачать здесь

Отправлено: 19:31, 12-08-2015 | #16


Аватара для Elven

Ветеран


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

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


Цитата Альберт_25:
почему то батнику пофиг на дату »
Как говаривал Станиславский - "Не верю!"
вот эта команда
Код: Выделить весь код
dir /o:d /t:c /a:-d /s *.cer
действительно находит все файлы с расширениием *.cer и сортирует их по дате создания, а вот эта команда
Код: Выделить весь код
 | find "%dt%"
находит все строчки в которых встречается дата указанная в переменной %dt%
Для пущей чистоты эксперимента можно запустить прямо из командной строки
Код: Выделить весь код
dir /o:d /t:c /a:-d /s *.cer ^| find "13.08.2015"
(вместо указанной для примера даты вводим ту которую надо) и посмотреть что же будет на выходе.

Отправлено: 08:46, 13-08-2015 | #17


Ветеран


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

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


Вдруг у него региональные стандарты иные?!

Отправлено: 09:38, 13-08-2015 | #18


Ветеран


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

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


Цитата Альберт_25:
но почему то батнику пофиг на дату он выдаёт все файлы с расширением .cer, а мне нужны только те которые изменены в конкретную дату которую я задам »


А вот я почему-то верю.

В первом цикле (
Код: Выделить весь код
for /f "tokens=4-5" %%b in ('dir /o:d /t:c /a:-d /s *.cer ^| find "%dt%"') do
)
действительно определяются имена (именно имена, а не полные имена) файлов, соответствующие дате создания, но вот затем это имя передаётся для разбора во второй цикл, в котором и происходит не то, что нужно ТС.

Во втором цикле (
Код: Выделить весь код
for /f "delims=" %%a in ('dir /a:-d /s /b %%b') do echo %%~fa | find /v /i "old"
)
происходит поиск всех файлов, соответствующих данному имени и не являющихся исключениями, и дата создания уже полностью игнорируется.

Отправлено: 09:49, 13-08-2015 | #19


Аватара для Elven

Ветеран


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

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


Georgio, поэтому я и предупредил что если есть файлы с одинаковыми именами, то мой вариант не прокатит.
Цитата Elven:
Однако если есть файлы с одинаковыми именами лежащие в разных папках, будет уже неправда.»
На что получил ответ
Цитата Альберт_25:
Таких файлов нету) »
Однако, Georgio, в любом случае спасибо за конструктивную критику.

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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] батник для создания папки с текущей датой + время aggressor_ Скриптовые языки администрирования Windows 23 08-02-2018 16:02
CMD/BAT - [решено] Как заархивировать файлы с датой создания этих файлов? yaoleg2 Скриптовые языки администрирования Windows 1 01-09-2013 03:09
CMD/BAT - Мониторинг - поиск архивов с заданной датой в имени Serg2010 Скриптовые языки администрирования Windows 0 21-05-2012 21:59
Драйвер - Автоматический поиск драйвера в заданной папке в Windows XP dzekka Microsoft Windows 2000/XP 2 19-10-2010 05:09
Драйвер - [решено] Поиск подходящего драйвера в заданной папке с подпапками Speaker Microsoft Windows 2000/XP 2 01-03-2008 19:07




 
Переход