Команда Windows "dir", Упорядочить по имени И < что-то >

StackOverflow https://stackoverflow.com/questions/242913

  •  04-07-2019
  •  | 
  •  

Вопрос

Мы видим в каталоге файлы, упорядоченные по имени в проводнике Windows.

Если я попробую то же самое в командной строке Windows, он упорядочится по имени по-разному - правильно :

dir *.jpg /ON /B

cubierta.jpg
pag00.jpg
pag06.jpg
pag08.jpg
pag09.jpg
pag100.jpg
pag101.jpg
pag102.jpg
pag103.jpg
pag104.jpg
pag105.jpg
pag106.jpg
pag107.jpg
pag108.jpg
pag109.jpg
pag11.jpg, etc, etc, etc, ...

Есть ли способ заставить dir упорядочить по имени, где он читает числа, как это сделал бы человек?

Это было полезно?

Решение

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

Другие советы

Проводник Windows использует специальную функцию сортировки, StrCmpLogicalW , которая cmd.exe не используется, отсюда и различия в выводе. Вы могли бы написать свою собственную программу сортировки с этим, все же.

Вас также могут заинтересовать записи Майкла Каплана в этой тема (из ящик для предложений ).

Хе хе хе. Вы все хотите знать мое решение?

Я использую программу ImageMagic, которая конвертирует мои PDF-файлы размером 200 МБ в формат JPG. В конце длинного процесса он сериализует все файлы в числовом порядке ... Таким образом, в основном дата создания файла немного увеличивается по мере записи каждого файла на жесткий диск. Таким образом, любая из следующих двух команд пакетного файла запишет файлы в «правильном» порядке:

dir *.jpg /ODN /B > files.txt

for /f "tokens=*" %%a in ('dir *.jpg /ODN /B') do (
    echo ^<page^>%%a^</page^> >>pages.xml.fragment
)

Таким образом, команда dir * .jpg / OD упорядочивает содержимое каталога по возрастанию (созданию?), и мы можем полностью игнорировать фактическое имя файла.

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

Однако это можно смоделировать с помощью замены регулярных выражений. В Windows вы можете использовать Jscript и VBS для этого. Но самый простой способ - это использование powershell. Вы можете вызвать его из cmd.exe следующим образом

powershell -Command "(Get-ChildItem | Sort-Object { [regex]::Replace(

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

Однако это можно смоделировать с помощью замены регулярных выражений. В Windows вы можете использовать Jscript и VBS для этого. Но самый простой способ - это использование powershell. Вы можете вызвать его из cmd.exe следующим образом

@echo off
setlocal enabledelayedexpansion
for %%a in (*.txt) do (
    set num=00000000000000000000%%a
    set num=!num:~-20!
    set $!num!=%%a
)
for /f "tokens=1,* delims==" %%a in ('set <*>') do echo %%b

Конечно, вам нужно изменить число в PadLeft (20) , если ваши файлы содержат более длинный ряд цифр

Как отсортировать по имени файла так же, как это делает проводник Windows?

Собственное пакетное решение можно найти в Естественно сортировать файлы в пакетном режиме , если ваши файлы имеют только один номер в конце

<*>.Name, '\d+', { $args[0].Value.PadLeft(20) }) }).Name"

Конечно, вам нужно изменить число в PadLeft (20) , если ваши файлы содержат более длинный ряд цифр

Как отсортировать по имени файла так же, как это делает проводник Windows?

Собственное пакетное решение можно найти в Естественно сортировать файлы в пакетном режиме , если ваши файлы имеют только один номер в конце

<*>

4NT / TCC / TC от JPSoft по умолчанию использует естественный порядок сортировки; альтернативно, если у вас есть доступ к GNU " сортировать " Программа, такая как инструменты Cygwin , вы можете сделать что-то вроде " ls -1 | / bin / sort -g " или "dir / b | \ cygwin \ bin \ sort -g " ;; это даст вам имена файлов в естественном порядке сортировки.

Если вы ограничены инструментами, встроенными в окна, вы можете попробовать Инструменты сценариев Windows и делать что-то вроде использования FileSystemObject для получения имен файлов и регулярных выражений для извлечения числовой части имен файлов для использования в качестве ключей в объекте Dictionary. Я оставлю реальное кодирование в качестве упражнения для читателя:)

Нет, это невозможно сделать. Windows Explorer использует другой подход для решения этой проблемы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top