|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] сортировка по дате |
|
CMD/BAT - [решено] сортировка по дате
|
Новый участник Сообщения: 8 |
Профиль | Отправить PM | Цитировать Собственно сабж. Нужно вывести в текстовый файл все файлы в данной директории созданные раньше заданной даты. Есть код, который выводит все файлы в в директории где лежит batник.
Как сделать сортировку по дате? @echo off mode con codepage select=1251 > nul set name=%~1 if "%~1"=="" set /p name=Enter file name: echo Please wait... set ind=0 :next set /a ind+=1 set tmp= for /f "delims=\ tokens=%ind%" %%a in ("%~dp0") do set tmp=%%a if not "%tmp%"=="" goto next set /a ind-=1 if exist %name% del %name% for /f "delims=\ tokens=%ind%*" %%a in ('dir *.* /b /s') do echo %%b >> %name% mode con codepage select=866 > nul if exist %name% start %name% |
|
Отправлено: 19:23, 10-05-2010 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата BEL9ILLI:
В выходном файле имена файлов по дате не отсортированы Echo Off rem Определяем: rem Дату. Отображаем файлы, изменённые ранее указанной. rem Директорию и маску файлов имена которых выводятся в файл rem Имя выходного файла Set DateNew=05.12.2008 Set WhereFiles="E:\Delete\yyyyy\*.*" Set WhereOutTxt="E:\Delete\Файлы_до_%DateNew:~6,4%%DateNew:~3,2%%DateNew:~0,2%.txt" Set DN=%DateNew:~6,4%%DateNew:~3,2%%DateNew:~0,2% Del %WhereOutTxt% FOR %%i IN (%WhereFiles%) DO Call :Older "%%i" GoTo End :Older Set DT=%~t1 Set DT=%DT:~6,4%%DT:~3,2%%DT:~0,2% If %DT% LSS %DN% Echo %~t1 %~1>>%WhereOutTxt% :End |
|
------- Последний раз редактировалось megaloman, 11-05-2010 в 00:42. Отправлено: 20:35, 10-05-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Вот vbs-скрипт, который выводит в файл список файлов, изменённых до указанного времени.
В выходном файле имена файлов отсортированы по дате. Наверное, можно сделать и bat-файл, например, на базе команды dir /O:D ? но что-то не очень очевидно как. ' Определяем: DateNew = "05.12.2008" ' Дату. Отображаем файлы, изменённые ранее указанной. inDir = "E:\Delete\yyyyy" ' Директорию c файлами имена которых выводятся в файл WhereOutTxt = "E:\Delete\Файлы_до_" + Mid(DateNew, 7, 4) + Mid(DateNew, 4, 2) + Mid(DateNew, 1, 2) + ".txt" ' Имя выходного файла Set FSO = CreateObject("Scripting.FileSystemObject") ' Создаём объект для доступа к файловой системе DN = DateSerial(CInt(Mid(DateNew, 7, 4)), CInt(Mid(DateNew, 4, 2)), CInt(Mid(DateNew, 1, 2))) Set F1 = FSO.OpenTextFile(WhereOutTxt, 2, True) On Error Resume Next ' Обработаем ситуацию, если встретилась директория без доступа Set F = FSO.GetFolder(inDir) ' Создаём объект для доступа к директории If Err.Number = 0 Then On Error GoTo 0 Set AllFiles = F.Files ' Для текущей директории создаём коллекцию файлов N = AllFiles.Count ReDim MNames(N - 1), MDates(N - 1), M(N - 1) i = -1 For Each iFile In AllFiles ' Просматриваем файлы в директории i = i + 1 M(i) = i MNames(i) = iFile.Name ' MDates(i) = iFile.DateCreated ' Дата создания файла ' MDates(i) = iFile.DateLastAccessed ' Дата последнего доступа к файла MDates(i) = iFile.DateLastModified ' Дата последней модификации файла Next For i = 0 To N - 1 For j = i To N - 1 If MDates(M(i)) > MDates(M(j)) Then k = M(i) M(i) = M(j) M(j) = k End If Next If DN > MDates(M(i)) Then F1.WriteLine (Mid(CStr(MDates(M(i))) + " ", 1, 21) + MNames(M(i))) Else Exit For End If Next Else MsgBox inDir + vbCrLf + Err.Description, 0, "Проблемы с директорией" End If F1.Close |
------- Отправлено: 00:35, 11-05-2010 | #3 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать вот в том то и проблема, но все равно спасибо.
|
Отправлено: 00:43, 11-05-2010 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
||
Отправлено: 07:51, 11-05-2010 | #5 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Цитата amel27:
|
|
Отправлено: 17:26, 11-05-2010 | #6 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Вот bat-файл, который выводит в файл список файлов, изменённых до указанного времени.
В выходном файле имена файлов по дате отсортированы (Спасибо Amel27) Изменения коснулись трёх строк (Del, For изменил, If добавил) . Echo Off rem Определяем: rem Дату. Отображаем файлы, изменённые ранее указанной. rem Директорию и маску файлов имена которых выводятся в файл rem Имя выходного файла Set DateNew=26.04.2010 Set WhereFiles="E:\Delete\yyyyy\*.*" Set WhereOutTxt="E:\Delete\Файлы_до_%DateNew:~6,4%%DateNew:~3,2%%DateNew:~0,2%.txt" Set DN=%DateNew:~6,4%%DateNew:~3,2%%DateNew:~0,2% Del %WhereOutTxt% >Nul 2>Nul FOR /F "usebackq delims=" %%i IN (`Dir /B /O:D %WhereFiles%`) DO Call :Older "%%i" GoTo End :Older If %1=="" GoTo End Set DT=%~t1 Set DT=%DT:~6,4%%DT:~3,2%%DT:~0,2% If %DT% LSS %DN% Echo %~t1 %~1>>%WhereOutTxt% :End |
------- Отправлено: 17:56, 11-05-2010 | #7 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать да если бы я себе делал бы, то конечно vbs использовал, но надо именно батник.
|
Отправлено: 21:34, 11-05-2010 | #8 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
MSFT SQL Server - Выборка по дате | Pulvertum | Программирование и базы данных | 7 | 03-11-2009 00:58 | |
VBS/WSH/JS - [решено] VBS/WSH. Сортировка файлов по дате. | rancid | Скриптовые языки администрирования Windows | 3 | 23-07-2009 06:38 | |
Прочие БД - SQL запрос на выборку по дате | echo off | Программирование и базы данных | 1 | 10-06-2009 01:15 | |
DLE. Отключение новостей по дате. | Dimonweb | Вебмастеру | 1 | 06-07-2008 12:29 | |
Delphi - Delphi 7 + БД MS Access: выборка по дате | lunny | Программирование и базы данных | 1 | 02-06-2007 11:46 |
|