web-dev-qa-db-ja.com

与えられたディレクトリ内のすべてのファイルとディレクトリをフルパスで再帰的にリストする方法は?

どういうわけかdir /bコマンドのようですが、そこに隠しファイルとシステムファイルも必要です。組み込みのdirコマンドでは、このような「隠された」ファイルを残りのファイルと一緒にリストすることはできません。/sを使用してフルパスを指定する必要があります。もちろん、これは再帰的ではありません。

私はlsコマンドのWindowsバージョンで遊んでも、運もありませんでした。フルパスを表示するには、リストするディレクトリの最後にアスタリスク(mydir\*)を追加する必要がありますが、これにより再帰的になります。

14
rsk82

何もインストールしたくない場合は、次のコマンドを使用することもできます。

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

最初にcdをディレクトリに入れる必要があります。そうしないと機能しません。

10
Dennis

次のコマンドを試してください。

dir /s /b /a

これはすべてのファイルを提供します。必要に応じて、またはフォルダ名を追加する場合は、FINDを介して実行できます。

18
bjkamp

Lsを試した場合、なぜcygwinをインストールしないのですか?あなたはcygwinでfindを使うことができます:

find -name "*"

Cygwinをインストールしてcygwinでfindを使用する場合は、Windowsにもfind.exeがあるため、フルパスを使用するか、cygwin binパスをsystem32の前に挿入して、cygwinでの検索が呼び出されることを確認してください。

1
Codism

これは古い質問ですが、とにかく何か追加したいと思いました。

DIRは、必要なすべてのディレクトリツリー、特にC:上のディレクトリツリーを正しく通過しません。保護が異なるため、場所をあきらめるだけです。

ATTRIBはより多くを見つけるので、はるかにうまく機能します。 (なぜこの違いがあるのですか?MSがこの点で1つのユーティリティを別の方法で動作させるのはなぜですか?知っていれば、のろわれます。)私の経験では、これを処理する最も効果的な方法は、粗雑ですが、2つのリストを取得することです。

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

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

それらの違いを取得します。その違いは、C:のディレクトリです(あまりにも非表示になっているものを除きます)。 C:の場合、通常は管理者として実行します。

0
djc

私はディレクトリリストを操作したかったので、「ディレクトリを印刷」しました。そのための手順を見つけましたが、レジストリへの変更が含まれていました。これをいじくり回したくないし、リストを印刷したくもないので、レジストリを変更せずに目標を達成する方法を見つけました。ユーティリティディレクトリに保存する2つのバッチファイルプログラムを作成しました。次に、ディレクトリを印刷または操作したい場合は、適切なバッチファイルをサブジェクトディレクトリにコピーして実行します。はい、どうぞ:

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"
0
Roger Bohl

sedはgnuwin32でダウンロードできます。これにより、現在のディレクトリが先頭に追加されます。

%cd%を実行しても機能しません..したがって、%cd:\=\\%は、すべての\\\に変換し、その結果、\になります。

C:\WINDOWS>dir /b | sed "s/^/%cd:\=\\%\\/" 
C:\WINDOWS\0.log
C:\WINDOWS\003109_.tmp
C:\WINDOWS\addins
0
barlop