TUTOS.EU

Lister tous les répertoires et fichiers d'une arborescence en powershell

Référencer dans un fichier tous les répertoires et fichiers d'une arborescence de façon récursive

Au préalable vous pouvez désactiver l'arrêt du script si il rencontre une erreur, cad ici si il n'arrive pas à accéder à un répertoire

$ErrorActionPreference = "silentlycontinue" #En cas d'erreur, on ne dit rien et on continu
Lien vers le fichier : cliquez ici Copier le code

Exemple basique où l'on liste tout à partir de C:\

Get-ChildItem -Path "C:\" -Recurse | %{Write-host $_.FullName}
Lien vers le fichier : cliquez ici Copier le code

La même chose mais on ne liste que les fichiers, et on ne prend que ceux avec l'extension txt

Get-ChildItem -Path "C:\" -Recurse -File -include "*.txt" | %{Write-host $_.FullName}
Lien vers le fichier : cliquez ici Copier le code

Voici une aide pour générer une commande de recherche

Elément recherché :

La même chose mais on écrit le résultat dans un fichier C:\ZZMonFichierensortie.txt au lieu de l'afficher

Get-ChildItem -Path "C:\" -Recurse -File -include "*.txt" | %{ADD-content -path "C:\ZZMonFichierensortie.txt" -value $_.FullName}
Lien vers le fichier : cliquez ici Copier le code

Ici on écrit dans un fichier la liste des fichiers ainsi que le chemin du répertoire qui le contient

$RepertorieaTraiter = "C:\"

$varCheminRepertoireScript = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Definition)
$currentScriptName = $MyInvocation.MyCommand.Name #Récupération du nom du script en cours

#On ne prend que le nom du script sans l'extention. Pour cela on chercher la position d'un point en partant de la droite et on prend tout ce qui est à sa gauche
$currentScriptName = $currentScriptName.substring(0,$($currentScriptName.lastindexofany(".")))

#Création du fichier vierge
$EmplacementFichier = "$varCheminRepertoireScript\$($currentScriptName)_Result.txt"
$MonFichier = New-Item -type file $EmplacementFichier -Force

$MesObjets = get-childitem $RepertorieaTraiter -Recurse
#get-childitem "C:\" -Recurse

foreach ($UneLigne in $MesObjets){
	
    #$UneLigne |gm
    #Write-Host "$($UneLigne.Name), $($UneLigne.FullName), $($UneLigne.PSParentPath)"
    #Write-Host $UneLigne.FullName
    $MyLine = "$($UneLigne.Name)`t$($UneLigne.FullName)" #`t$($UneLigne.PSParentPath)"
    add-content $MonFichier $MyLine


}
Lien vers le fichier : cliquez ici Copier le code

2