2008-09-19 50 views
2

任何人都碰巧擁有一個示例腳本,用於使用Powershell遞歸地在文件系統中給定目錄?最終我想要做的是創建一個腳本,爲我生成一個目錄下的NSIS文件列表。與BASH腳本here非常相似的東西。用Powershell遞歸文件系統

+0

我的答案是否足夠?如果是這樣,請將其標記爲已接受。 – halr9000 2008-09-23 12:44:38

回答

3

由於halr9000證明,你可以使用Get-ChildItem cmdlet的-recurse開關參數獲取指定路徑下的所有文件和目錄。

它看起來就像你在你的問題聯繫到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' 
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