
ハード ドライブにはバックアップがいっぱいあり、それをスプレッドシートにすばやく、次の特定の方法で詳細に記述する必要があります。必要な操作を何らかの .bat ファイルまたは .cmd ファイルで簡単に実行できる方法があることを期待していますが、どこから始めればよいかわかりません。
csv に移動するために必要なのは、階層の最初の 2 つのフォルダー レベルだけです。
ドライブからエクスポートする必要があるデータは次のとおりです。
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
これを実行すると、私が探しているものに少し近づいたように見えますが、元の指定どおりに必要な情報がまだ表示されません。エクセルのスクリーンショットこの投稿の一番上:
ご覧のとおり、適切なディレクトリ パスがないため、<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