Как вывести список всех файлов и каталогов в данном каталоге с полным путем, но не рекурсивно?

14

Как-то похоже на dir /bкоманду, но мне также нужны скрытые и системные файлы. Встроенная команда dir не позволяет перечислять такие «скрытые» файлы вместе с остальными, и я должен использовать /sих, чтобы указать полный путь, что, конечно, не является рекурсивным.

Я также играл с Windows-версией lsкоманды и там тоже не повезло. Для отображения полного пути вы должны добавить звездочку ( mydir\*) в конец каталога, который вы перечисляете, но это делает его рекурсивным.

rsk82
источник
1
Я могу решить часть вашей проблемы: флаг / a заставляет каталог включать скрытые и системные файлы.
Гарри Джонстон

Ответы:

9

Если вы не хотите ничего устанавливать, вы также можете использовать следующую команду:

for /f "delims=" %a in ('cd') do @for /f %b in ('dir /b /a') do @echo %a\%b

cdСначала нужно войти в каталог, иначе он не будет работать.

Деннис
источник
2
или это! for / f "delims ="% b in ('dir / b / a') do @echo% cd% \% b Но у вас интересная техника, довольно общая
barlop
Не могли бы вы объяснить, как работает эта команда?
rubo77
18

Попробуйте следующую команду:

dir /s /b /a

Он выдаст ВСЕ файлы, вы можете запустить его, FINDесли хотите, или добавить имя папки.

bjkamp
источник
1

Если вы попробовали ls, почему бы просто не установить Cygwin? Вы можете использовать find в cygwin:

find -name "*"

Если вы устанавливаете cygwin и хотите использовать find в cygwin, убедитесь, что find в cygwin вызывается либо с использованием полного пути, либо вставьте путь в cygwin bin перед system32, поскольку в Windows также есть find.exe.

Codism
источник
я проверил unixutils, найти рекурсивно :(
rsk82
2
@ rsk82: с -maxdepth 1, это не так.
Деннис
0

Вы можете скачать sed с помощью gnuwin32. Это добавляет текущий каталог.

Выполнение% cd% не работает .. поэтому %cd:\=\\%преобразует каждый \в \\, что приводит к \.

C:\WINDOWS>dir /b | sed "s/^/%cd:\=\\%\\/" 
C:\WINDOWS\0.log
C:\WINDOWS\003109_.tmp
C:\WINDOWS\addins
barlop
источник
0

Это старый вопрос, но я все равно решил что-нибудь добавить.

DIR некорректно пересекает все деревья каталогов, которые вы хотите, в частности, не те, что на C :. Он просто сдается местами из-за разных защит.

ATTRIB работает намного лучше, потому что он находит больше. (Почему такая разница? Почему MS заставляет одну утилиту работать так, а другую - в этом отношении иначе? Черт, если я знаю.) По моему опыту, наиболее эффективный способ справиться с этим, хотя это и клочок, - это получить два списка:

attrib /s /d C:\ >%TEMP%\C-with-directories.txt

attrib /s C:\ >%TEMP%\C-without-directories.txt

и получите разницу между ними. Эта разница в каталогах на C: (кроме тех, которые слишком хорошо спрятаны). Для C: обычно я делаю это с правами администратора.

DJC
источник
0

Я хотел работать со списком каталогов, поэтому я погуглил «Распечатать каталог». Я нашел инструкции для этого, но они включали изменения в реестр. Не желая возиться с этим и желая использовать листинг, а не распечатывать его, я нашел способ достичь своих целей без изменения реестра. Я создал две программы пакетного файла для сохранения в каталоге утилит. Затем, когда я захотел распечатать или работать с каталогом, я просто скопировал соответствующий пакетный файл в каталог объекта, а затем выполнил его! Вот они:

rem PrintThisDirectory.bat
rem Prints the directory where it resides
@echo off
dir %1/-p/o:gn> "%temp%\listing"
start /w notepad "%temp%\listing"

Rem ShowThisDirectory.bat
Rem Displays in Notepad the Directory where it resides
@echo off
dir %1/o:gn> "%temp%\listing"
start /w notepad "%temp%\listing"
Роджер Бол
источник