7

ディレクトリを示すためにバックスラッシュが使用されているこのようなディレクトリ内のすべてのファイルとフォルダーを再帰的に出力するスクリプトを見つけようとしています。

Source code\
Source code\Base\
Source code\Base\main.c
Source code\Base\print.c
List.txt

私は PowerShell 3.0 を使用していますが、私が見つけた他のほとんどのスクリプトは機能しません (ただし、私が求めているようなものは何もありませんでした)。

さらに:再帰的にする必要があります。

4

8 に答える 8

14

おそらく探しているのは、ファイルとフォルダーを区別するのに役立つものです。幸いなことにPSIsContainer、フォルダーには true、ファイルには false のプロパティ呼び出しがあります。

dir -r  | % { if ($_.PsIsContainer) { $_.FullName + "\" } else { $_.FullName } }

C:\Source code\Base\
C:\Source code\List.txt
C:\Source code\Base\main.c
C:\Source code\Base\print.c

主要なパス情報が望ましくない場合は、次を使用して簡単に削除できます -replace

dir | % { $_.FullName -replace "C:\\","" }

うまくいけば、これがあなたを正しい方向に向かわせます。

于 2013-03-01T20:02:49.043 に答える
4

次のようになります。

$path = "c:\Source code"
DIR $path -Recurse | % { 
    $_.fullname -replace [regex]::escape($path), (split-path $path -leaf)
}

@Goyuixのアイデアに従ってください:

$path = "c:\source code"
DIR $path -Recurse | % {
    $d = "\"
    $o = $_.fullname -replace [regex]::escape($path), (split-path $path -leaf)
    if ( -not $_.psiscontainer) {
        $d = [string]::Empty 
    }
    "$o$d"
}
于 2013-03-01T19:45:26.100 に答える
3
dir | % {
   $p= (split-path -noqualifier $_.fullname).substring(1)
   if($_.psiscontainer) {$p+'\'} else {$p}
}
于 2013-03-01T21:25:23.227 に答える
3

これは、他のいくつかの回答と同様に完全なパスを示していますが、より短いです:

ls -r | % { $_.FullName + $(if($_.PsIsContainer){'\'}) }

ただし、OPは相対パス(つまり、現在のディレクトリからの相対パス)を要求したと思われ、@CBの回答のみがその点に対処しました。したがって、 a を追加するだけで、次のようになりsubstringます。

ls -r | % { $_.FullName.substring($pwd.Path.length+1) + $(if($_.PsIsContainer){'\'}) }
于 2013-03-28T16:48:30.990 に答える
1

PowerShell ではありませんが、コマンド プロンプト内で次のコマンドを使用して、ファイルをテキスト ファイルに再帰的に一覧表示できます。

dir *.* /s /b /a:-d > filelist.txt
于 2016-11-16T02:17:20.513 に答える
0
(ls $path -r).FullName | % {if((get-item "$_").psiscontainer){"$_\"}else{$_}}

PS3.0でのみ使用

于 2013-03-01T21:33:12.847 に答える
0

これは、PowerShell の get-childitem コマンドで実現できます。以下の構文を参照してください。

Get-ChildItem "フォルダー名またはパス" -Recurse | FullName > list.txt を選択します

これにより、すべてのプレーン ファイルとフォルダ名を list.txt というファイルに再帰的に書き込むことができます。詳細については、これを参照してください。https://ss64.com/ps/get-childitem.html

返信が遅くなりましたが、誰かの役に立つかもしれません!

于 2021-12-08T03:01:36.460 に答える