有人碰巧有一个示例脚本用于使用Powershell在文件系统中递归给定目录吗?最终我想要做的是创建一个脚本,在给定目录的情况下为我生成NSIS文件列表。与使用BASH脚本完成的here非常类似。
答案 0 :(得分: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
答案 1 :(得分:3)
在halr9000演示时,您可以使用-recurse
cmdlet的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'