Войти

Показать полную графическую версию : Сортировка...


skeletor
15-03-2007, 16:35
Есть файл, содержащий список файлов. Нужно в этом файле отсортировать имена файлов по размеру самих файлов.
Как такое реализовать???

CyberDaemon
15-03-2007, 17:08
В файле только имена файлов или размеры тоже есть?

skeletor
15-03-2007, 17:09
Только имена. Но можно сделать и полный вывод с размером, датой и ещё кучу инфой.
В какую сторону копать???

Tigr
15-03-2007, 17:45
Изучи ключи команды DIR. Обрати особое внимание на ключи /O и /S. Полученное можно вместо экрана сохранить в файл.

skeletor
15-03-2007, 17:50
Изучал. При таком использовании - имена файлов вписываются без полного пути. А мне надо именно с полным путём. Или Dir всё-таки может выводить полные пути к файлам?

Tigr
15-03-2007, 18:43
Могу предложить только dir /o:s /s > spisok.txt - далее написать макрос в Excel, к-й ко всем файлам будет добавлять имя папки.

skeletor
15-03-2007, 18:52
Проблема в том, что мне не все файлы нужны из екущей директории, а только некорые, которые удовлетворяют условиям.
dir /o:s /s - нормально работает, если нет поддиректорий - тогда для каждой подпаки сортировка идёт отдельно, а не в целом. И получается, что отсортированы файлы только в группах, которые и определяеют их принадлежность к подпапке.

Я добился того, что выводиться размер файла и его полный путь в одной строке (всё это выводиться в отдельный файл), отделённой табулятором. Появился вопрос - как отсортировать строки, по размерам цифр (размерам файлов)? При использовании комманды sort - идёт сортировка по алфавитно-цифровому признаку.

Tigr
15-03-2007, 18:54
Возможно, dir совершенно не подходит для такой цели. Почему бы не поискать альтернативу (http://www.google.ru/search?hl=ru&q=%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0+%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8% D0%B5+%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B+%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0 %B3%D0%BE%D0%B2&lr=) ?

skeletor
15-03-2007, 19:21
Теперь мне нужно осортировать файл по числам. То есть, не по алфавитному порядку, а именно по числовому, от наибольшего до наименьшего (в математическом понимании).
Може есть консольные утилиты для этого?

amel27
16-03-2007, 07:52
можно к примеру выровнять числа по правому краю, а поле слева заполнить нулями... но для этого потребуется полноценный батник. Вот пример, который выводит размер и имя файла в текущем каталоге с подкаталогами:@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

SET TAB=0000000000000000
for /f %%i in ('dir /a-d /s /b *.*') do (
CALL :LENGTH %%~zi
CALL :PRINT %%~zi !LENGTH! %%i
)
:LENGTH
SET LENBUF=%~1
SET LENGTH=0
IF "%~1"=="" GOTO :EOF
:LENGTH_START
SET /A LENGTH+=1
IF ""=="!LENBUF:~%LENGTH%,1!" GOTO :EOF
GOTO :LENGTH_START
:PRINT
SET SIZE=!TAB:~0,-%2!%1;%3
@echo !SIZE!
GOTO :EOF

CyberDaemon
16-03-2007, 08:48
Если есть текстовый файл, в котором имена файлов и их размер, то загнать этот файл в эксель, так чтобы имена и размеры попали в разные столбцы, и...

skeletor
16-03-2007, 10:59
Ты не понял. Мне не нужно заполнять нулями. Мне нужно либо отсортировать ВЫБРАНЫЕ ФАЙЛЫ (НЕ ВСЕ В ТЕКУЩЕЙ ДИРЕКТОРИИ, А ИМЕННО КОНКРЕТНЫЕ, КОТОРЫЕ ПОДХОДЯТ ОПРЕДЕЛЁННО) ПО РАЗМЕРУ!!!! А не заполнять нулями. Либо сразу сортировать по размеру и записывать в файлик, либо потом по числовому признаку. Вот пример из файлика

То, что есть (1-ый столбец размер файла, 2-ой полный путь)

3391958 "Q:\Dir\qip8000\qip.exe"
12 "Q:\Dir\qip8000\LI\current.cfg"
18 "Q:\Dir\qip8000\LI\langs.cfg"
353 "Q:\Dir\qip8000\LI\English\chars_r.ini"
340 "Q:\Dir\qip8000\LI\English\chars_t.ini"

а я хочу во так

3391958 "Q:\Dir\qip8000\qip.exe"
353 "Q:\Dir\qip8000\LI\English\chars_r.ini"
340 "Q:\Dir\qip8000\LI\English\chars_t.ini"
18 "Q:\Dir\qip8000\LI\langs.cfg"
12 "Q:\Dir\qip8000\LI\current.cfg"


Как такое организовать???

Если есть текстовый файл, в котором имена файлов и их размер, то загнать этот файл в эксель, так чтобы имена и размеры попали в разные столбцы, и...
Идея неплохая. Уже пробовал. Прлучается. Но мне нужно автоматизировать этот процес, то есть автоматом перегонять в Excel (с помощью txt2xls), потом нужно отсортировать в Excel (как???? имею ввиду не вручную, а автоматически - либо макросами\скриптами\...) ну и потом обратно в txt конвертнуть.
Желательно консольный вариант.

amel27
16-03-2007, 17:28
skeletorТы не понял. Мне не нужно заполнять нулями. Мне нужно либо отсортировать ВЫБРАНЫЕ ФАЙЛЫ это ты не понял :) нули нужны только для сортировки, потом ключ можно убрать...
Применительно к сортировке файла file.txt - 2-й скрипт выводит список с ключом сортировки, 1-й выполняет сортировку и отсекает ключ... Никаких промежуточных текстовых файлов не создается:

script1.cmd@echo off
for /f "tokens=1* delims=;" %%i in ('script2.cmd^|sort /R') do (
@echo %%j
)script2.cmd@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

SET TAB=0000000000000000
for /f "tokens=1* delims= " %%i in (file.txt) do (
CALL :LENGTH %%i
CALL :PRINT %%i !LENGTH! %%j
)
GOTO :EOF
:LENGTH
SET LENBUF=%~1
SET LENGTH=0
IF "%~1"=="" GOTO :EOF
:LENGTH_START
SET /A LENGTH+=1
IF ""=="!LENBUF:~%LENGTH%,1!" GOTO :EOF
GOTO :LENGTH_START
:PRINT
SET LINE=!TAB:~0,-%2!%1;%1 %3
@echo !LINE!
GOTO :EOF
PS: Можно и одним скриптом, но тогда будет еще запутанней... ;)

skeletor
16-03-2007, 18:02
Огромное спасибо, работает. Ещё такой вопросик - нельзя ли сделать побольше табуляцию??? Например двойную.

SET LINE=!TAB:~0,-%2!%1;%1 %3 ----------------- я думаю в этой строке, только я не силён в языке оболочке.

skeletor
16-03-2007, 18:32
Всё, решил проблему.
Надо между %1 и %3 поставить больше пропуска.




© OSzone.net 2001-2012