ファイル名、ファイルパス、およびディレクトリ ツリーのプロパティを CSV にエクスポートするにはどうすればよいですか?

ファイル名、ファイルパス、およびディレクトリ ツリーのプロパティを CSV にエクスポートするにはどうすればよいですか?

ハード ドライブにはバックアップがいっぱいあり、それをスプレッドシートにすばやく、次の特定の方法で詳細に記述する必要があります。必要な操作を何らかの .bat ファイルまたは .cmd ファイルで簡単に実行できる方法があることを期待していますが、どこから始めればよいかわかりません。

csv に移動するために必要なのは、階層の最初の 2 つのフォルダー レベルだけです。

フォルダ構造

ドライブからエクスポートする必要があるデータは次のとおりです。

Excel用データ

PowerShell で次のコードを使用しようとしました:

cd\ c:<--- テストフォルダがある場所

それから

cd\ test<--- 出力するためのテストフォルダ構造が含まれています

それから私は見つかった質問を投稿する前に。

Get-ChildItem -Recurse -Directory -Depth 3 |
    Select-Object FullName |
    Export-Csv Test.csv -NoTypeInformation

そして、何らかの方法で、CSV に出力するためにさらにフォルダー プロパティを指定する必要があることに気付きましたSelect-Objectが、上記の操作を基本的な方法で実行できないようです。

代わりに、次のエラーが返されます。

Get-ChildItem : A parameter cannot be found that matches parameter name 'Directory'.
At line:1 char:34
+ Get-ChildItem -Recurse -Directory <<<<  -Depth 3 |
    + CategoryInfo          : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

また、テスト フォルダーを Notepad++ にインポートしてみましたが、ワークスペースとして表示され、参照できますが、必要な情報を含む csv にエクスポートできません。ディレクトリを右クリックしたときに表示されるスクリーンショットだけがオプションで、出力オプションはありません (私はこの分野の専門家ではありません)。

メモ帳++

私が試したもう一つのことは、次の内容を含む test.cmd ファイルを作成することでした。

C:\TEST\
dir >> C:\TEST\test.csv

これを実行すると、私が探しているものに少し近づいたように見えますが、元の指定どおりに必要な情報がまだ表示されません。エクセルのスクリーンショットこの投稿の一番上:

.cmd ファイルからの output.csv

ご覧のとおり、適切なディレクトリ パスがないため、<DIR>代わりに表示されるのは、サブフォルダーを含むフォルダー構造の 2 番目のレベルも表示されません。各フォルダーのファイル数とサイズ、および列への並べ替えも正しくありません。

コマンドベースのデータベース作成の知識がある方は、私を助けてくれませんか? 私の質問は詳細が不十分だったため保留になりましたが、試したことすべてを説明するために最大限の努力をしました。また、Nearline ストレージからスプレッドシートに 2 ペタバイトを超えるストレージ バックアップがあるため、これを迅速かつ効率的に実行できる必要があります。

よろしくお願いします。

答え1

WinDirStat については Bill_Stuart に同意します... (ただし、私は何年もそれを使用する必要がなかったのですが) それでも、どうしても必要だというのであれば、おそらく以下のようなもので、もちろん、サイズについては計算を任意のものに変更してください。

Clear-Host
Get-ChildItem -Path 'd:\temp' -Recurse -Directory -Depth 3 | 
Select-Object Name,FullName,
@{Name='FolderCount';Expression = {(Get-ChildItem -Path $_.FullName -Directory -Recurse | Measure-Object).Count}},
@{Name='FileCount';Expression = {(Get-ChildItem -Path $_.FullName -File -Recurse| Measure-Object).Count}},
@{Name='SizeMB';Expression = {(Get-ChildItem $_.FullName -Recurse | Measure-Object -Property Length -Sum).Sum / 1MB}} `
| Format-Table -AutoSize

# Results


Name           FullName                               FolderCount FileCount               SizeMB
----           --------                               ----------- ---------               ------
abcpath0       D:\temp\abcpath0                                 2         5    0.005889892578125
abcpath1       D:\temp\abcpath1                                 2         5    0.005889892578125
abcpath2       D:\temp\abcpath2                                 2         5    0.005889892578125
Duplicates     D:\temp\Duplicates                              24     12677     88.9826745986938
EmptyFolder    D:\temp\EmptyFolder                              0         0                    0
NewFiles       D:\temp\NewFiles                                 0         4 0.000568389892578125
...

答え2

Powershell で以下を操作してみてください。

$dir = "C:\"

$results = @()

gci $dir -Recurse -Depth 1 | % { 

    $temp = [ordered]@{
        NAME            = $_
        SIZE            = "{0:N2} MB" -f ((gci $_.Fullname -Recurse | measure -Property Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB)
        FILE_COUNT      = (gci -File $_.FullName -Recurse | measure | select -ExpandProperty Count)
        FOLDER_COUNT    = (gci -Directory $_.FullName -Recurse | measure | select -ExpandProperty Count)
        DIRECTORY_PATH  = $_.Fullname
    }

    $results += New-Object PSObject -Property $temp

}

$results | export-csv -Path "C:\output.csv" -NoTypeInformation

ここに画像の説明を入力してください

ディレクトリサイズの計算

一時配列をCSVへ

関連情報