2008-09-19 11 views
2

Quelqu'un a-t-il un exemple de script pour récurer un répertoire donné dans un système de fichiers avec Powershell? En fin de compte ce que je veux faire est de créer un script qui va générer des listes de fichiers NSIS pour moi donné un répertoire. Quelque chose de très similaire à ce qui a été fait here avec un script BASH.Récursif du système de fichiers avec Powershell

+0

Est-ce que ma réponse est suffisante? Si oui, veuillez le marquer comme accepté. – halr9000

Répondre

3

Comme démontré halr9000, vous pouvez utiliser le paramètre de commutateur -recurse de l'applet de commande Get-ChildItem pour récupérer tous les fichiers et répertoires sous un chemin d'accès spécifié.

Il semble que le script bash vous lié à votre question enregistre les répertoires aussi bien, voici donc une fonction simple pour revenir à la fois les fichiers et répertoires dans un seul objet de résultat:

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 
} 

ici est comment vous pouvez l'utiliser pour créer les mêmes fichiers texte d'installation/désinstallation à partir de l'exemple de halr9000, y compris les répertoires de désinstallation:

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

Il s'agit d'un port "paraphrase" de ce 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 
Questions connexes