Pregunta

¿Alguien tiene un script de muestra para recurrir a un directorio determinado en un sistema de archivos con Powershell?En última instancia, lo que quiero hacer es crear un script que genere listas de archivos NSIS para mí, dado un directorio.Algo muy parecido a lo que se hizo aquí con un script BASH.

¿Fue útil?

Solución

Como halr9000 demostrado, puede utilizar el -recurse cambiar el parámetro del Get-ChildItem cmdlet para recuperar todos los archivos y directorios en una ruta especificada.

Parece que el script bash al que vinculó en su pregunta también guarda los directorios, por lo que aquí hay una función simple para devolver tanto los archivos como los directorios en un único objeto de resultado:

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
}

Así es como puede usarlo para crear los mismos archivos de texto de instalación/desinstalación del ejemplo de halr9000, incluidos los directorios de desinstalación:

$files = Get-InstallFiles 'C:\some\directory'
$files.InstallFiles | Set-Content 'installfiles.txt'
$files.UninstallFiles + $files.Directories | Set-Content 'uninstallfiles.txt'

Otros consejos

Esta es una versión "parafraseada" de ese script 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top