1 (изменено: GrukhvinEV, 2011-12-01 05:44:13)

Тема: CMD/BAT: команды dir и sort

Условие:"Разработать командный файл, который помещает список файлов текущего каталога в текстовый файл и в зависимости от ключа сортирует по какому-либо полю. Реализовать два варианта: с использованием только команды DIR, с использованием команд DIR и SORT."
С использованием команды dir, я написал, все работает, но вот как отсортировать командой sort не пойму, требуется помощь.
Только с командой dir:

@ECHO off
set /p pset="Enter dir:"
echo Dir: %pset%
echo Sort 1-name 2-size 3- date 4-type
CHOICE /C:1234
IF ERRORLEVEL 1 goto 1
IF ERRORLEVEL 2 goto 2
IF ERRORLEVEL 3 goto 3
IF ERRORLEVEL 4 goto 4
:1
Dir %pset% /a:-d /b /o:n > Sort_files_name.txt
echo Save to Sort_files_name.txt
pause
exit
:2
Dir %pset% /a:-d /b /o:s > Sort_files_size.txt
echo Save to Sort_files_size.txt
pause
exit
:3
Dir %pset% /a:-d /b /o:d > Sort_files_date.txt
echo Save to Sort_files_date.txt
pause
exit
:4
Dir %pset% /a:-d /b /o:e > Sort_files_type.txt
echo Save to Sort_files_type.txt
pause
exit

2

Re: CMD/BAT: команды dir и sort

dir параметры | sort параметры > файл

3

Re: CMD/BAT: команды dir и sort

Да это понятно, только вот как ключами команды sort отсортировать по разным полям, типа по имени, размеру, типу файла, дате.

4

Re: CMD/BAT: команды dir и sort

GrukhvinEV пишет:

как ключами команды sort отсортировать по разным полям, типа по имени, размеру, типу файла, дате.

Никак. Сортировка производится для строк сформированного входного потока, где нет полей.

Замечание:
Команда вида

if errorlevel N

работает как

если errorlevel больше либо равно N

Это значит, что Вам следует изменить порядок проверок на обратный, то есть должно быть

IF ERRORLEVEL 4 goto 4
IF ERRORLEVEL 3 goto 3
IF ERRORLEVEL 2 goto 2
IF ERRORLEVEL 1 goto 1
( 2 * b ) || ! ( 2 * b )

5

Re: CMD/BAT: команды dir и sort

Rumata пишет:

Никак. Сортировка производится для строк сформированного входного потока, где нет полей.

SORT/? пишет:

/+n                         Задает число символов, n, до начала каждого
                              сравнения. /+3 показывает, что каждое
                              сравнение будет начинаться с третьего символа
                              каждой строки. Строки меньше чем n символов
                              собираются перед всеми остальными строками.
                              По умолчанию, сравнение начинается с первого
                              символа каждой строки.

6

Re: CMD/BAT: команды dir и sort

!k, это-то понятно. Проблема в том, что надо:

* отрезать нижние две строки с итогом (верхние режутся обычным skip при разборе);
* «разворачивать» дату в формат YYYY.MM.DD для корректной сортировки таким способом, а для выдачи «разворачивать» дату обратно;
* для сортировки таким способом по расширению надо выполнять подобные же весьма нетривиальные действия.

7 (изменено: !k, 2011-12-03 20:14:28)

Re: CMD/BAT: команды dir и sort

сортировка по расш. ("." это разделитель в дате)
*длинные имена идут лесом

dir /-n |find "." |sort /+10

по дате – да, будет геморройно

8

Re: CMD/BAT: команды dir и sort

Спасибо!
С Уважением Евгений!