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

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

Ответить
Настройки темы
CMD/BAT - [решено] сортировка по дате

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


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

Профиль | Отправить 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

 

Ветеран


Contributor


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

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


Цитата BEL9ILLI:
Нужно вывести в текстовый файл все файлы в данной директории созданные раньше заданной даты. »
Вот bat-файл, который выводит в файл список файлов, изменённых до указанного времени.
В выходном файле имена файлов по дате не отсортированы
Код: Выделить весь код
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



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

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


Ветеран


Contributor


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

Профиль | Отправить 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
Благодарности: 0

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


вот в том то и проблема, но все равно спасибо.

Отправлено: 00:43, 11-05-2010 | #4


Googler


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

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


Цитата megaloman:
Наверное, можно сделать и bat-файл, например, на базе команды dir /O:D ? но что-то не очень очевидно как.»
да так же:
Код: Выделить весь код
@Echo Off

Set _Date=20100101
Set _Mask=*.*

For /F "Delims=" %%i In ('DIR /B/OD %_Mask%') Do Set _D=%%~ti& Call :TestFile "%%i"
:TestFile
If Not "%~1"=="" If %_D:~6,4%%_D:~3,2%%_D:~0,2% LSS %_Date% Echo %~1
GoTo :EOF
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:51, 11-05-2010 | #5


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


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

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


Цитата amel27:
Код:
@Echo Off
Set _Date=20100101
Set _Mask=*.*
For /F "Delims=" %%i In ('DIR /B/OD %_Mask%') Do Set _D=%%~ti& Call :TestFile "%%i"
:TestFile
If Not "%~1"=="" If %_D:~6,4%%_D:~3,2%%_D:~0,2% LSS %_Date% Echo %~1
GoTo :EOF »
У меня этот вариант не заработал. Сделал как написал megaloman в первом посте, тока переделал немного в плане ввода данных.

Отправлено: 17:26, 11-05-2010 | #6


Ветеран


Contributor


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

Профиль | Отправить 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
Я бы предложил всё-таки попробовать vbs-скрипт (переносите текст скрипта в блокнот, сохраняете как файл с расширением .vbs, запускаете как любой исполнимый файл, ничего дополнительно не нужно) Хоть скрипт будет работать медленнее, но экран дёргаться не будет как при запуске батника.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 17:56, 11-05-2010 | #7


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


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

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


да если бы я себе делал бы, то конечно vbs использовал, но надо именно батник.

Отправлено: 21:34, 11-05-2010 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход