Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Поиск последних, созданных файлов (http://forum.oszone.net/showthread.php?t=208903)

shao 13-06-2011 22:38 1693879

Поиск последних, созданных файлов
 
Можно ли на CMD/BAT (если нет то на VBS, но желательно на CMD/BAT) реализовать такое:
Нужно найти на указанном диске или в указанной директории файлы и папки недавно созданные. Маска не указывается - расширения могут быть любые. Применяться такой батник будет для отслеживания файлов и папок которые создаются в момент установки программы. Поэтому в поиске нужно искать последние созданные файлы..
Спасибо!

По разделу искал - нашёл что-то похожее, но сам сделать не могу из-за недостатка знаний.

Iska 13-06-2011 23:20 1693907

shao, два вопроса:
1. Почему не воспользоваться имеющимися программами для отслеживания изменений в файловой системе и реестре?
2. Что значит «последние»? Как Вы буквально это понимаете? Созданные за X минут до момента запуска пакетного файла?! Тогда чему равно X?

shao 13-06-2011 23:51 1693918

Цитата:

Цитата Iska
shao, два вопроса: »

......
Ответы:
1. Все эти программы , в основном нужно устанавливать, а батник - "легкий" много места не занимает..
И это не единственная причина......
2.Это значит - последние по времени создания..

Iska 14-06-2011 02:30 1693974

shao, пока Вы внятно не ответите на второй вопрос — вряд ли будет внятный ответ, ибо «последние по времени создания» — расплывчато. Последние по сравнению с каким временем?

ferget 14-06-2011 02:53 1693980

может имеется в виду что-то вроде такого

Код:

Echo Off
Set Folder=F:\путь к папке
for /f "delims=" %%d in ('dir /b/s/a-d/od "%Folder%\*.*"') do set "$d=%%~nxd %%~td"
echo %$d:~, 100%
Pause>Nul


AZJIO 14-06-2011 03:07 1693982

shao, попробуй regshot, устанавливать не нужно, 72 кб. Ещё посмотри мою утилитку Create_list_files, добавляешь в выходной список возраст файла и путь и указываешь сортировку по возрасту.

amel27 14-06-2011 07:53 1694019

Столкнулся с одной неприятной особенностью команды DIR - при совместном использовании ключей /S /OD /T сквозная сортировка по дате ВСЕГО списка работает только для даты модификации /TW, для других значений ключа /T (C и A) сортировка проводится лишь внутри отдельных подкаталогов... Т.е. в случае с подпапками сортировать по убыванию даты создания файла/каталога придется отдельно.

Вариант для русской локали (DD.MM.YYYY) и русского/английского интерфейса Windows:
Код:

@echo off
if "%~1"=="" (set "$1=.") else set "$1=%~1"
(for /f "tokens=1-2*" %%a in ('dir/s/tc/a/-c "%$1%"') do (set "$a=%%a"& set "$b=%%b"
  if defined $a if "%%a"=="Directory" if "%%b"=="of" set "$a="& set "$p=%%~c"
  if defined $a if "%%a"=="Содержимое" if "%%b"=="папки" set "$a="& set "$p=%%~c"
  if defined $a for /f "tokens=1*" %%C in ("%%~c") do (set "$c=%%C"& set "$d=%%D"
    SETLOCAL EnableDelayedExpansion
    if "!$b:~2,1!"==":" if not "!$d!"=="." if not "!$d!"==".." (if "!$c!"=="<DIR>" set "$d=!$d!\."
      echo !$a:~-4!!$a:~3,2!!$a:~,2!%%b#%%a %%b !$p!\!$d!)
    ENDLOCAL
)))>"%~dpn0.tmp"
(for /f "tokens=1* delims=#" %%a in ('sort/r /l "C" "%~dpn0.tmp"') do @echo %%b
)|more


shao 14-06-2011 08:09 1694027

Цитата:

Цитата AZJIO
shao, попробуй »

Спасибо, регшот не подходит - нужно отследить созданные файлы , а мониторить реестр.
А вторую утилиту я попробую...

ferget 14-06-2011 08:16 1694028

amel27
ваш скрипт оставляет файл *.tmp, зачем?

amel27 14-06-2011 08:21 1694030

Цитата:

Цитата ferget
ваш скрипт оставляет файл *.tmp, зачем? »

чтобы было видно как он работает

shao 14-06-2011 08:25 1694032

amel27, Я правильно понял - для сортировки списка файлов отдельно по каждой папке нужно каждый раз указывать путь к ней ?

amel27 14-06-2011 08:32 1694037

shao, скрипт сортирует содержимое ОДНОЙ папки с подкаталогами (как и указано в топике), путь к папке передается параметром батника, если не указан - сканируется текущая папка
Цитата:

Цитата shao
сортировки списка файлов отдельно по каждой папке »

это другая задача и сразу встаёт вопрос о формате вывода, о чём уже говорил Iska

shao 14-06-2011 08:48 1694043

Цитата:

Цитата amel27
shao, скрипт сортирует содержимое ОДНОЙ папки с подкаталогами (как и указано в топике), путь к папке передается параметром батника, если не указан - сканируется текущая папка »

Отлично! Это и нужно.
Извините, наверное не совсем коректно сформулировал вопрос.
Как раз это и нужно - сортировать содержимое указанной директории с подкаталогами!
И ещё пожалуйста объясните :
"Directory" - указать папку в которой производится сортировка
А что такое "Содержимое" и "папки" ?

amel27 14-06-2011 09:09 1694050

Цитата:

Цитата shao
"Directory" - указать папку в которой производится сортировка
А что такое "Содержимое" и "папки" ? »

пример:
Код:

dir/s "%temp%"
результат для русского интерфейса:
читать дальше »
Код:

...
 Содержимое папки C:\DOCUME~1\user~1\LOCALS~1\Temp\msohtml

03.06.2011  16:58    <DIR>          .
03.06.2011  16:58    <DIR>          ..
              0 файлов              0 байт

 Содержимое папки C:\DOCUME~1\user~1\LOCALS~1\Temp\msohtml1

07.06.2011  19:33    <DIR>          .
07.06.2011  19:33    <DIR>          ..
07.06.2011  19:33    <DIR>          01
              0 файлов              0 байт
...


для английского интерфейса:
читать дальше »
Код:

...
 Directory of C:\DOCUME~1\user~1\LOCALS~1\Temp\msohtml1

07.06.2011  19:33    <DIR>          .
07.06.2011  19:33    <DIR>          ..
07.06.2011  19:33    <DIR>          01
              0 файлов              0 байт
...


shao 15-06-2011 22:41 1695138

amel27, Я имею в виду: в Вашем коде нужно указывать какие-либо данные ?
Как/где указать путь к сканируемой директории ? Или батник нужно запускать только с той директории...

AZJIO, Спасибо, отличная программка !
Только встречно назревает вопрос :
Предоставленная программа формирует список файлов по заданным параметрам, только вот никак не удаётся этот список построить так , чтобы файлы указывались по дате - по возрастанию или убыванию.
Список формируется по дате вразброс... (И почему-то путь к файлам указывается только с указанием родительской директории. Без указания каталогов и подкаталогов. )

Подскажите уважаемые , как при помощи батника скопировать из списка
список файлов, созданных по дате создания последними .
Параметры отображения списка могут быть любые.
То есть : Путь, размер, название файла, дата создания, дата изменения.
Спасибо !

amel27 16-06-2011 02:19 1695238

Цитата:

Цитата shao
Как/где указать путь к сканируемой директории ? »

в командной строке:
Код:

script.BAT "C:\TEST"
..или через "отправить": http://forum.oszone.net/post-1693210-14.html

AZJIO 16-06-2011 02:23 1695240

shao
Цитата:

не удаётся этот список построить так , чтобы файлы указывались по дате - по возрастанию или убыванию.
Там вообще то есть галка "Сортировка по убыванию". А вообще я после вчерашнего поста обновил, в связи с тем, что я как бы её предложил, но сортировать по возрату в виде идеального списка не получится, так как дата это не число и на участках списка будет разброс. Поэтому вчера добавил критерий "возраст в секундах", здесь обычное число и сортировка идеальная (возраст изменения в секундах). Если требуется именно создание, то придётся мне добавлять критерий. Посмотри раскрывающийся список сортировки, может всё таки текущий вариант устроит.

И для удобства добавил поддержку ком-строки и твик реестра, который добавит утилитку в контекстное меню папки и сделал сохранение всех параметров (шаблона, критерий сортировки)в ini. Теперь один раз настроив шаблон окрываем из контекстного меню, нажимаем старт, получаем открытый в блокноте список. Если что пиши прям на страничке утилиты, если есть какие предложения по программе, а то здесь тема по cmd/bat-файлам.

Цитата:

(И почему-то путь к файлам указывается только с указанием родительской директории. Без указания каталогов и подкаталогов. )
не должно так быть, наоборот указывается либо абсолютный путь, либо относительный. На всякий случай проверю на Win7, но там обычная регулярное выражение и выдать родительский директорий ни как не может, такого даже нет в доступных элементах.

На Win7 пути нормальные, как я и говорил. На счёт сортировки используйте критерий "возраст в секундах" и главное чтоб была правильно установлена текущая дата, иначе, если дата старая то файлы будут из будущего (отрицательное число в списке) и тогда сортировка может оказаться некорректной.

shao 16-06-2011 03:23 1695251

AZJIO, Давайте, может создайте отдельную тему по Вашей программе. Я предоставлю скрин и текст
созданного списка файлов. Там и обсудим.
Модераторов попросим, чтобы перенесли в тему все посты....
Программа интересная и нужная . Думаю, пользователям пригодится...


Время: 17:57.

Время: 17:57.
© OSzone.net 2001-