7

多くのフォルダとサブフォルダで構成されるルートディレクトリがあります。*.slnや*.designer.vbなどの特定のファイルがフォルダーまたはサブフォルダーに存在するかどうかを確認し、結果をテキストファイルに出力する必要があります。

例:

$root = "C:\Root\"
$FileType = ".sln",".designer.vb"

テキストファイルの結果は次のようになります。

.sln ---> 2 files
.sln files path ----> 
c:\Root\Application1\subfolder1\Test.sln
c:\Root\Application2\subfolder1\Test2.sln

どんな助けでも大歓迎です!

よろしく、アシッシュ

4

3 に答える 3

5

これを試して:

function Get-ExtensionCount {
    param(
        $Root = "C:\Root\",
        $FileType = @(".sln", ".designer.vb"),
        $Outfile = "C:\Root\rootext.txt"
    )

    $output = @()

    Foreach ($type in $FileType) {
        $files = Get-ChildItem $Root -Filter *$type -Recurse | ? { !$_.PSIsContainer }
        $output += "$type ---> $($files.Count) files"
        foreach ($file in $files) {
            $output += $file.FullName
        }
    }

    $output | Set-Content $Outfile
}

私はそれをデフォルトのパラメータ値としてあなたの値を持つ関数に変えました。を使用して呼び出す

Get-ExtensionCount    #for default values

または

Get-ExtensionCount -Root "d:\test" -FileType ".txt", ".bmp" -Outfile "D:\output.txt"

ファイルに保存された出力例:

.txt ---> 3 files
D:\Test\as.txt
D:\Test\ddddd.txt
D:\Test\sss.txt
.bmp ---> 2 files
D:\Test\dsadsa.bmp
D:\Test\New Bitmap Image.bmp

最初にすべてのファイル数を取得するには、次のことを試してください。

function Get-ExtensionCount {
    param(
        $Root = "C:\Root\",
        $FileType = @(".sln", ".designer.vb"),
        $Outfile = "C:\Root\rootext.txt"
    )
    #Filecount per type
    $header = @()
    #All the filepaths    
    $filelist = @()

    Foreach ($type in $FileType) {
        $files = Get-ChildItem $Root -Filter *$type -Recurse | ? { !$_.PSIsContainer }
        $header += "$type ---> $($files.Count) files"
        foreach ($file in $files) {
            $filelist += $file.FullName
        }
    }
    #Collect to single output
    $output = @($header, $filelist)    
    $output | Set-Content $Outfile
}
于 2013-01-30T07:40:30.363 に答える
5

これは、拡張子が.txtまたは.ps1のファイルが$OutputPathディレクトリに少なくとも1つ存在するかどうかを判断するためのワンライナーです。

(Get-ChildItem -Path $OutputPath -force | Where-Object Extension -in ('.txt','.ps1') | Measure-Object).Count

説明:このコマンドは、リストされた拡張子のいずれかに一致する、指定されたディレクトリー内のファイルの数を示します。最後に追加できます。これは、 ifブロック-ne 0で使用されるtrueまたはfalseを返します。

于 2020-09-22T16:14:22.693 に答える
0

$rootこれにより、ディレクトリとそのサブディレクトリで$FileType、隠しファイルを含み、ディレクトリを除外するタイプのファイルが検索されます。

$root = "C:\Root\";
$FileType = "*.sln", "*.designer.vb";
$results = Get-ChildItem -Path $root -Force -Recurse `
    | Where-Object {
        if ($_ -isnot [System.IO.DirectoryInfo])
        {
            foreach ($pattern in $FileType)
            {
                if ($_.Name -like $pattern)
                {
                    return $true;
                }
            }
        }

        return $false;
    }

$FileTypeワイルドカードパターンとしてフォーマットされるように文字列を変更したことに注意してください。次に、ファイルを拡張子でグループ化します。

$resultGroups = $results | Group-Object -Property 'Extension';

次に、各グループをループして、ファイル数とパスを出力します。

foreach ($group in $resultGroups)
{
    # $group.Count: The number of files with that extension
    # $group.Group: A collection of FileInfo objects
    #  $group.Name: The file extension with leading period
    Write-Host "$($group.Name) ---> $($group.Count) files";
    Write-Host "$($group.Name) files path ---->";

    foreach ($file in $group.Group)
    {
        Write-Host $file.FullName;
    }
}

結果をコンソールではなくファイルに書き込むには、コマンドレットの代わりにOut-Fileコマンドレットを使用します。Write-Host

于 2013-01-30T07:42:25.810 に答える