Powershell を使用したファイル システムの再帰
-
01-07-2019 - |
質問
Powershell を使用してファイル システム内の特定のディレクトリを再帰するためのサンプル スクリプトを持っている人はいますか?最終的に私がやりたいのは、ディレクトリを指定して NSIS ファイル リストを生成するスクリプトを作成することです。行われたことと非常によく似た何か ここ BASH スクリプトを使用します。
解決
として ハル9000 実証済みなので、使用できます -recurse
のスイッチパラメータ Get-ChildItem
コマンドレットを使用して、指定したパスにあるすべてのファイルとディレクトリを取得します。
質問でリンクした bash スクリプトはディレクトリも保存しているようです。そこで、ファイルとディレクトリの両方を 1 つの結果オブジェクトで返す単純な関数を次に示します。
function Get-InstallFiles {
param( [string]$path )
$allItems = Get-ChildItem -path $path -recurse
$directories = $allItems | ? { $_.PSIsContainer } | % { $_.FullName }
$installFiles = $allItems | ? { -not $_.PSIsContainer } | % { $_.FullName }
$uninstallFiles = $installFiles[-1..-$installFiles.Length]
$result = New-Object PSObject
$result | Add-Member NoteProperty Directories $directories
$result | Add-Member NoteProperty InstallFiles $installFiles
$result | Add-Member NoteProperty UninstallFiles $uninstallFiles
return $result
}
これを使用して、halr9000 の例と同じインストール/アンインストール テキスト ファイル (アンインストール ディレクトリを含む) を作成する方法を次に示します。
$files = Get-InstallFiles 'C:\some\directory'
$files.InstallFiles | Set-Content 'installfiles.txt'
$files.UninstallFiles + $files.Directories | Set-Content 'uninstallfiles.txt'
他のヒント
これは、その bash スクリプトの「言い換え」ポートです。
$path = "c:\path\to\program"
$installFiles = "installfiles_list.txt"
$uninstFiles = "uninstfiles_list.txt"
$files = get-childitem -path $path -recurse | where-object { ! $_.psIsContainer } # won't include dirs
$filepath = $files | foreach-object { $_.FullName }
$filepath | set-content $installFiles -encoding ASCII
$filepath[($filepath.length-1)..0] | set-content $uninstFiles -encoding ASCII
所属していません StackOverflow