Одной строкой в консоли Windows: проблемы и решения
У меня нет отдельной заметки по полезным консольным командам масдайки (этот старый список едва ли в счёт), так как большинство решений очень просты и хорошо задокументированы. Неожиданно дважды за неделю обнаружив, что человек долго бьётся с простыми вещами, решил такую заметку завести на случай, если ещё всплывёт подобное.
Чаще всего нет смысла лезть в голую консоль (Win+R, cmd, Enter), а достаточно владения нормальным двухпанельным файл-менеджером, таким как Far, но даже в Far есть не всё, и обычно выбор - читать бред нейросети, отчего-то усиливающийся в таких вопросах, или долго искать плагин, или знать, зачем нужна строчка консоли под панелями файл-менеджера. :)
1. Проблема: есть папка, в ней ещё куча папок. Нужно скопировать файлы по маске (например, *.html) в другой источник так, чтобы сохранились относительные пути к ним (то есть, 1\index.html и 2\index.html остались во вложенных папках "1" и "", а не появлялся запрос на переписывание файла).
2
Решение: в общей родительской папке отдайте консольную команду вида
xcopy маска путь /s
например
xcopy *.html d:\temp\ /s
Относительные пути ко всем найденным во вложенных папках файлам будут сохранены. Потом уже из temp кидайте файлы в удалённый источник или ещё куда-то тем же Far'ом.
2. Проблема: собрать в текстовом файле табличную информацию о нужных файлах (имя с учётом возможных пробелов, размер, дата, время) в виде, удобном для дальнейшей алгоритмической обработки.
Решение: не мучайтесь с dir /s и её лишними данными в выводе, просто перейдите в общую родительскую папку и скажите в консоли
where /r . *.* /f /t >list.txt
Затем открывайте полученный в папке файл list.txt в Excel или другом табличном редакторе, позволяющем разметить текст на столбцы данных.
Для кириллических версий Windows файл list.txt будет в кодировке OEM-866 (DOS), её можно при желании поменять в Notepad++ или где-то ещё (хотя Excel откроет и так).
3. Проблема: рекурсивно найти в папке и вложенных папках все файлы, содержащие нужную строку символов в кодировке UTF-8 и сформировать список путей к ним.
Решение: команда findtsr умеет искать рекурсивно, но отказывается иметь дело с UTF-8, нам помогло следующее:
findstr /S /M /G:"s.txt" ".\*.txt" > results.txt
Файл s.txt содержал искомую строку в кириллице UTF-8.
Перед вызовом findstr в консоли сменили кодировку на нужную:
chcp 65001
У меня сработало как непосредственно из консоли, так и из командной строки Far Manager. Это может работать долго при большом объёме данных.
01.05.2026, 12:20 [184 просмотра]

