有人碰巧有一个使用 Powershell 递归文件系统中给定目录的示例脚本吗?最终我想要做的是创建一个脚本,该脚本将为我生成给定目录的 NSIS 文件列表。与所做的非常相似的事情 这里 使用 BASH 脚本。

有帮助吗?

解决方案

作为 哈尔9000 演示后,您可以使用 -recurse 的开关参数 Get-ChildItem cmdlet 检索指定路径下的所有文件和目录。

看起来您在问题中链接到的 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'

其他提示

这是该 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top