디렉토리 트리의 파일 이름, 파일 경로 및 속성을 CSV로 내보내는 방법은 무엇입니까?

디렉토리 트리의 파일 이름, 파일 경로 및 속성을 CSV로 내보내는 방법은 무엇입니까?

스프레드시트에 신속하게 다음과 같은 구체적인 방법으로 자세히 설명해야 하는 백업이 가득한 하드 드라이브가 있습니다. 일종의 .bat 또는 .cmd 파일을 통해 필요한 작업을 수행할 수 있는 쉬운 방법이 있기를 바라지만 어디서부터 시작해야 할지 모르겠습니다.

내가 필요한 것은 CSV로 이동하기 위해 계층 구조의 처음 두 폴더 수준입니다.

폴더 구조

그리고 이것은 드라이브에서 내보내야 하는 데이터입니다.

Excel용 데이터

Powershell에서 다음 코드를 사용하려고 시도했습니다.

cd\ c:<--- 내 테스트 폴더가 있는 곳

그 다음에

cd\ test<--- 출력할 테스트 폴더 구조가 포함되어 있습니다.

그럼 이건 내가설립하다내 질문을 게시하기 전에.

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

Select-Object그리고 나는 csv로 출력하기 위해 더 많은 폴더 속성을 지정하는 데 어떻게든 사용해야 한다는 것을 알고 있지만 위의 내용이 기본 방식으로 작동하도록 할 수 없는 것 같습니다.

대신 다음과 같은 오류가 발생합니다.

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 파일의 출력.csv

보시다시피 적절한 디렉터리 경로가 부족하고 <DIR>대신 하위 폴더가 포함된 폴더 구조의 두 번째 수준도 볼 수 없습니다. 각 폴더의 파일 수와 크기, 열 정렬도 올바르지 않습니다.

명령 기반 데이터베이스 생성에 대한 지식이 있는 사람이 도움을 줄 수 있습니까? 내 질문은 충분히 자세하지 않았기 때문에 보류되었지만 지금은 내가 시도한 모든 것을 설명하기 위해 최선을 다했으며 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로의 임시 배열

관련 정보