使用Powershell递归文件系统
时间:2020-03-06 14:25:54 来源:igfitidea点击:
有人碰巧有一个示例脚本来使用Powershell递归文件系统中的给定目录吗?最终,我想要做的是创建一个脚本,该脚本将在给定目录的情况下为我生成NSIS文件列表。与此处的BASH脚本非常相似。
解决方案
这是该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
如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'