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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Хочу все знать (http://forum.oszone.net/forumdisplay.php?f=23)
-   -   Сортировка... (http://forum.oszone.net/showthread.php?t=81011)

skeletor 15-03-2007 16:35 562119

Сортировка...
 
Есть файл, содержащий список файлов. Нужно в этом файле отсортировать имена файлов по размеру самих файлов.
Как такое реализовать???

CyberDaemon 15-03-2007 17:08 562130

В файле только имена файлов или размеры тоже есть?

skeletor 15-03-2007 17:09 562132

Только имена. Но можно сделать и полный вывод с размером, датой и ещё кучу инфой.
В какую сторону копать???

Tigr 15-03-2007 17:45 562151

Изучи ключи команды DIR. Обрати особое внимание на ключи /O и /S. Полученное можно вместо экрана сохранить в файл.

skeletor 15-03-2007 17:50 562155

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

Tigr 15-03-2007 18:43 562176

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

skeletor 15-03-2007 18:52 562180

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

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

Tigr 15-03-2007 18:54 562182

Возможно, dir совершенно не подходит для такой цели. Почему бы не поискать альтернативу ?

skeletor 15-03-2007 19:21 562195

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

amel27 16-03-2007 07:52 562377

можно к примеру выровнять числа по правому краю, а поле слева заполнить нулями... но для этого потребуется полноценный батник. Вот пример, который выводит размер и имя файла в текущем каталоге с подкаталогами:
Код:

@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 562393

Если есть текстовый файл, в котором имена файлов и их размер, то загнать этот файл в эксель, так чтобы имена и размеры попали в разные столбцы, и...

skeletor 16-03-2007 10:59 562447

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

То, что есть (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 562670

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 562687

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

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

skeletor 16-03-2007 18:32 562710

Всё, решил проблему.
Надо между %1 и %3 поставить больше пропуска.


Время: 04:23.

Время: 04:23.
© OSzone.net 2001-