2

Powershell を使用してファイル システム内の特定のディレクトリを再帰するためのサンプル スクリプトをたまたま持っている人はいますか? 最終的にやりたいことは、ディレクトリを指定して NSIS ファイル リストを生成するスクリプトを作成することです。ここで BASH スクリプトを使用して行ったことと非常によく似ています。

4

2 に答える 2

4

これは、その 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
于 2008-09-19T23:36:38.117 に答える
3

halr9000が示したように、コマンドレットのスイッチ パラメーターを使用して、-recurse指定Get-ChildItemしたパスの下にあるすべてのファイルとディレクトリを取得できます。

質問でリンクしたbashスクリプトもディレクトリを保存しているように見えるので、ファイルとディレクトリの両方を単一の結果オブジェクトに返す簡単な関数を次に示します。

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'
于 2008-09-30T01:15:41.433 に答える