Описание
DIR – Выводит список файлов и подкаталогов каталога. Вызванная без параметров команда dir выводит метку тома и серийный номер, за которыми следует список каталогов и файлов на диске, включая их имена, дату и время последнего изменения. Для файлов dir выводит также расширение имени и размер в байтах.
Cmd bat, как сортировать файлы в папке по дате изменения?
Допустим, у меня в папке лежит 4 установочных файла и я только что закинул пятый. Батник должен установить тот который я закинул последним.
for /f “tokens=* delims=” %%a in (‘type temp.txt’) do (
for %%b in (%%a) do (
if “%%b”==”что то-там” adb install -r С:Hello(вот что использовать здесь я не знаю)
del temp.txt
Cmd command to recursively list all files in a folder with a sortorder without regard to location in a hierarchy?
I’ve been trying to come up with a way to use DIR list all the files on a drive according to their date, but my issue is that the resulting list still goes folder to folder alphabetically, just as one would expect. Within the folders, the files are listed properly, that’s not the problem. Cue possibly convoluted visuals.
This is the plain recursive directory listing (with a date column just because that happens to be what I want to sort against):
main Date
| -----------------
| -- file0_1.ext 1/5/10 12:00:00AM
| -- file0_2.ext 1/1/10 12:00:00AM
-- sub1
| | -- file1_1.ext 1/7/10 12:00:00AM
| | -- file1_2.ext 1/4/10 12:00:00AM
-- sub2
| | -- file2_1.ext 1/6/10 12:00:00AM
-- sub3
| | -- file3_1.ext 1/2/10 12:00:00AM
| -- sub3_1
| | | -- file3_1_1.ext 1/3/10 12:00:00AM
When I run
dir *.* /s/od
to list all files recursively sorted by date, I get
mainfile0_2.ext 1/1/10 12:00:00AM
mainfile0_1.ext 1/5/10 12:00:00AM
mainsub1file1_2.ext 1/4/10 12:00:00AM
mainsub1file1_1.ext 1/7/10 12:00:00AM
mainsub2file2_1.ext 1/6/10 12:00:00AM
mainsub3file3_1.ext 1/2/10 12:00:00AM
mainsub3sub3_1file3_1_1.ext 1/3/10 12:00:00AM
where the folders are listed alphabetically, but the files are indeed correctly sorted by date within their folders. However, what I’m really shooting for is:
mainfolderfile0_2.ext 1/1/10 12:00:00AM
mainsub3file3_1.ext 1/2/10 12:00:00AM
mainsub3sub3_1file3_1_1.ext 1/3/10 12:00:00AM
mainsub1file1_2.ext 1/4/10 12:00:00AM
mainfile0_1.ext 1/5/10 12:00:00AM
mainsub2file2_1.ext 1/6/10 12:00:00AM
mainsub1file1_1.ext 1/7/10 12:00:00AM
where the files are listed regardless of their location in the hierarchy according to their date.
One workaround is to pipe all the output from a listing to a text file, parse it, sort it properly, and list it all again, but I’m really looking for a single command I can run within cmd.exe, so it can be easily implemented from memory on other Windows machines.
Dir command availability
The dir command is available from within the Command Prompt in all Windows operating systems including Windows 10, Windows 8, Windows 7, Windows Vista, and Windows XP.
Older versions of Windows include the dir command as well but with a few fewer options than we have listed below. The dir command is also a DOS command, available in all versions of MS-DOS.
The dir command can be found in offline Command Prompt versions, like the ones available from Advanced Startup Options and System Recovery Options. The dir command is also included in the Recovery Console in Windows XP.
Dir command examples
Below are some of the different ways you can use the dir command:
Dir command syntax
dir [drive:][path][filename] [/a[[:]attributes]] [/b] [/c] [/d] [/l] [/n] [/o[[:]sortorder]] [/p] [/q] [/r] [/s] [/t[[:]timefield]] [/w] [/x] [/4]
Sort files by timestamp with the windows dir command
I want to sort following files with DIR by their Timestamp, which is defined in the filename – oldest first:
Timestamp = YYYYDDMM
NAME_20211410.dat
NAME_20211509.dat
NAME_20211609.dat
The result should look like this:
NAME_20211509.dat
NAME_20211609.dat
NAME_20211410.dat
How do i achieve that with an one-liner?
Windows ‘dir’ command, order by name and <something>
That’s called a natural sort. Currently there are no built-in command line tools that can sort naturally. If you want please vote for the feature to make Microsoft change their mind
This however can be simulated with a regex replacement to pad zeros to make numbers have the same length. That way a lexicographic sort is equivalent to a natural sort. On Windows you can use Jscript and VBS to do that. But the easiest way is using powershell. You can call it from cmd.exe like this
powershell -Command "(Get-ChildItem | Sort-Object { [regex]::Replace($_.Name, 'd ', { $args[0].Value.PadLeft(20) }) }).Name"
Of course you’ll need to change the number in PadLeft(20)
if your files contains a longer series of digits
How to sort by file name the same way Windows Explorer does?
A native batch solution can be found in
Naturally Sort Files in Batch if your files have only a single number at the end
@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 $0') do echo %%b
Параметры
Параметр | Описание |
---|---|
[диск:][путь] | Задание диска и каталога, список файлов которого будет выведен |
[имя_файла] | Задание файла или группы файлов, сведения о которых требуется вывести |
/p | Постраничный вывод сведений, т. е. с паузой после заполнения экрана. Для продолжения просмотра необходимо нажать любую клавишу |
/q | Вывод сведений о владельце файла |
/w | Вывод сведений в несколько колонок до пяти имен файлов или каталогов в каждой строке |
/d | Соответствует /w, но с сортировкой по столбцам |
/a [[:] атрибуты] | Выводит имена только тех файлов и каталогов, которые имеют указанные атрибуты. Если параметр /a не указан, команда dir выводит имена всех файлов, за исключением системных и скрытых. Если параметр /a указан без атрибутов, команда dir выводит имена всех файлов, включая скрытые и системные. Ниже приведен список значений, которые могут быть использованы при задании параметра атрибуты. Двоеточие (:) является необязательным. Значения из таблицы могут использоваться в любых комбинациях без пробела между ними. h – Скрытые файлы s – Системные файлы d – Каталоги a – Файлы, готовые к архивированию r – Файлы, доступные только для чтения -h – Файлы, не являющиеся скрытыми -s – Файлы, не являющиеся системными -d – Только файлы (не каталоги) -a – Файлы, не изменявшиеся после последнего архивирования -r – Файлы, не имеющие атрибута «Только чтение» |
/o [[:]порядок_сортировки] | Управление порядком сортировки и вывода имен файлов и каталогов командой dir. Если параметр /o, не задан, команда dir выводит имена в том порядке, в котором они записаны в каталоге. Если параметр /o использован без параметра порядок_сортировки, команда dir выводит имена каталогов в алфавитном порядке, затем — имена файлов в алфавитном порядке. Двоеточие (:) является необязательным. Ниже приведен список значений, которые могут быть использованы при задании параметра порядок_сортировки. Допускается использование любого их сочетания без пробелов между ними. n – Сортировка по именам в алфавитном порядке e – Сортировка по расширениям в алфавитном порядке d – Сортировка по дате и времени от ранних к поздним s – Сортировка по размеру от меньших к большим g – Сортировка с группированием каталогов перед файлами -n – Сортировка по именам в обратном алфавитном порядке (от Z к A) -e – Сортировка по расширению в обратном алфавитном порядке (от .ZZZ к .AAA) -d – Сортировка по дате и времени от поздних к ранним -s – Сортировка по размеру от больших к меньшим -g – Сортировка с группировкой каталогов после файлов |
/t [[:]поле_времени] | Задание поля времени для вывода и сортировки. Ниже приведен список значений, которые могут быть использованы при задании параметра поле_времени. c – Создание a – Последнее обращение w – Последняя запись |
/s | Перечисление всех случаев обнаружения определенного имени файла в указанном каталоге и всех его подкаталогах |
/b | Перечисление каждого имени файла (включая расширение) или каталога на отдельной строке. При использовании параметра /b заголовочные сведения или сводка не выводятся. Параметр /b отменяет параметр /w |
/l | Вывод несортированного списка имен каталогов и имен файлов строчными буквами. Параметр /l не позволяет преобразовывать дополнительные символы в строчные |
/n | Вывод списка в расширенном формате с именами файлов в правой части экрана |
/x | Вывод сокращенных имен файлов файловых систем NTFS и FAT. Формат совпадает с форматом параметра /n, но сокращенные имена выводятся после полных |
/c | Вывод разделителя десятичных разрядов в размере файлов |
/4 | Отображение года в четырехзначном формате |
/? | Отображение справки в командной строке |
Примеры использования
Чтобы вывести подряд все каталоги в алфавитном порядке, в несколько колонок и с паузой после заполнения каждого экрана, убедитесь, что корневой каталог является текущим, и введите следующую команду:
dir /s/w/o/p
Команда dir выводит имя корневого каталога, имена его подкаталогов и имена файлов (включая расширения) в этом каталоге. Затем выводятся имена подкаталогов и имена файлов в каждом каталоге дерева каталогов.Для изменения предыдущего примера так, чтобы команда dir не выводила имена каталогов, введите следующую команду:
dir /s/w/o/p/a:-d
Чтобы напечатать список каталогов, введите следующую команду:
dir > prn
Если указать параметр prn, список каталогов отправляется на принтер, подключенный к порту LPT1. Если принтер подключен к другому порту, необходимо заменить параметр prn именем этого порта.
Вывод команды dir также может быть направлен в файл при замене prn на имя файла. Кроме того, можно также ввести путь. Например, для направления вывода команды dir в файл Dir.doc в каталоге Records введите следующую команду:
dir > recordsdir.doc
Если файл Dir.doc не существует, команда dir создаст его при условии наличия каталога Records. Если этот каталог не существует, выводится следующее сообщение:
Ошибка создания файла
Чтобы вывести список всех файлов с расширением .txt во всех каталогах диска C, введите следующую команду:
dir c:*.txt /w/o/s/p
Команда dir выводит на экран алфавитный список файлов, удовлетворяющих заданному шаблону, в несколько колонок с паузой после заполнения каждого экрана.
Примечания
- Использование нескольких имен_файлов Допускается использование нескольких имен_файлов. Разделяйте имена файлов пробелом, запятой или точкой с запятой. Для вывода группы файлов допускается применение подстановочных знаков (? и *) в параметре имя_файла.
- Использование подстановочных знаков. Для вывода списка подгруппы файлов и подкаталогов можно использовать подстановочные знаки (? и *).
- Задание атрибутов файлов для вывода. Если параметр /a используется более чем с одним значением параметра атрибуты, команда dir выведет имена только тех файлов, все атрибуты которых совпадают с заданными. Например, при использовании параметра /a со значениями атрибутов r и -h в формате /a:r-h или /ar-h команда dir выведет имена файлов, являющихся одновременно скрытыми и защищенными от записи.
- Указание порядка сортировки имен файлов. Если указано несколько значений порядка_сортировки, команда dir сортирует имена файлов сначала по первому условию, затем — по второму и т. д. Например, если указан ключ /o со значениями e и -sпорядка_сортировки в формате /o:e-s или /oe-s, команда dir отсортирует имена каталогов и файлов по расширениям, затем от больших файлов к меньшим и выведет окончательный результат. В результате сортировки по алфавиту файлы без расширений будут идти вначале, затем имена каталогов, а потом имена файлов с расширениями.
- Использование перенаправления и каналовЧтобы перенаправить вывод команды dir в файл с помощью символа (>) или использовать канал (|) для передачи вывода в другую команду, необходимо использовать параметры команды dir/a:-d и /b для вывода только списка имен файлов. Параметр имя_файла с параметрами /b и /s можно использовать, чтобы указать поиск командой dir в текущем каталоге и его подкаталогах всех файлов, соответствующих значению имя_файла. При этом команда dir выведет только имя диска, имя каталога, имя файла и расширение по одному файлу в строке. Чтобы использовать перенаправление с помощью каналов, в файле Autoexec.nt должна быть установлена переменная среды TEMP.
- Предварительное задание параметров команды dir. Параметры команды dir могут быть предварительно заданы включением команды set для переменной среды DIRCMD в файл Autoexec.nt. В команде set dircmd может быть использована любая допустимая комбинация параметров команды dir, включая расположение и имя файла.Например, чтобы использовать переменную среды DIRCMD для задания вывода в расширенном формате (/w) по умолчанию, в файле Autoexec.nt необходимо ввести следующую строку:set dircmd=/w При однократном использовании команды dir можно отменить параметр с помощью переменной среды DIRCMD. Для этого введите параметр, который требуется отменить, в командной строке dir, указав перед ним знак минус. Например:
dir /-w
Чтобы изменить параметры DIRCMD, используемые по умолчанию, введите следующую команду:
set=новый_параметр
Новые параметры по умолчанию останутся в силе для всех последующих команд dir, пока команда set dircmd не задаст новые параметры или не будет перезагружен компьютер.
Чтобы удалить все параметры по умолчанию, введите следующую команду:
set dircmd=
Чтобы просмотреть текущие параметры переменной среды DIRCMD, введите следующую команду:
set
- Команда dir с другими параметрами доступна в консоли восстановления.
Синтаксис
dir [диск:][путь][имя_файла] [...] [/p] [/q] [/w] [/d] [/a[[:]атрибуты]][/o[[:]порядок_сортировки]] [/t[[:]поле_сортировки]] [/s] [/b] [/l] [/n] [/x] [/c] [/4]
. . . . . . .