Comment puis-je changer le code suivant pour regarder tous les fichiers .log dans le répertoire et pas seulement le seul fichier?
J'ai besoin de parcourir tous les fichiers et de supprimer toutes les lignes qui ne contiennent pas "step4" ou "step9". Actuellement, cela va créer un nouveau fichier, mais je ne sais pas comment utiliser la for each
boucle ici (débutant).
Les fichiers réels sont nommés comme ceci: 2013 09 03 00_01_29.log . Je voudrais que les fichiers de sortie les écrasent, ou aient le même nom, ajouté avec "out".
$In = "C:\Users\gerhardl\Documents\My Received Files\Test_In.log"
$Out = "C:\Users\gerhardl\Documents\My Received Files\Test_Out.log"
$Files = "C:\Users\gerhardl\Documents\My Received Files\"
Get-Content $In | Where-Object {$_ -match 'step4' -or $_ -match 'step9'} | `
Set-Content $Out
powershell
user2725402
la source
la source
BaseName
par,FullName
j'obtiens ce que je veux.Pour obtenir le contenu d'un répertoire, vous pouvez utiliser
Ensuite, vous pouvez également parcourir cette variable:
Un moyen encore plus simple de mettre cela en place est la
foreach
boucle (grâce à @Soapy et @MarkSchultheiss):la source
$files = Get-ChildItem "C:\Users\gerhardl\Documents\My Received Files\" $files | Where-Object { $outFile = $_.Name + "out" Get-Content $_.FullName | Where-Object { $_ -match 'step4' -or $_ -match 'step9' } | Set-Content $outFile }
foreach ($f in Get-ChildItem "C:\Users\gerhardl\Documents\My Received Files\") { ... }
ForEach ($f in $files){...}
Si vous avez besoin de boucler récursivement dans un répertoire pour un type de fichier particulier, utilisez la commande ci-dessous, qui filtre tous les fichiers de
doc
type fichier$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc
Si vous devez effectuer le filtrage sur plusieurs types, utilisez la commande ci-dessous.
$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc,*.pdf
Maintenant, les
$fileNames
variables agissent comme un tableau à partir duquel vous pouvez boucler et appliquer votre logique métier.la source
-Force
paramètre Get-ChildItem. Voir son doc sur docs.microsoft.com/en-us/powershell/module/… .Les autres réponses sont excellentes, je veux juste ajouter ... une approche différente utilisable dans PowerShell: installez les utilitaires GNUWin32 et utilisez grep pour afficher les lignes / rediriger la sortie vers le fichier http://gnuwin32.sourceforge.net/
Cela écrase le nouveau fichier à chaque fois:
Cela ajoute la sortie du journal, au cas où vous écraser le fichier logIn et que vous souhaitez conserver les données:
Remarque: pour pouvoir utiliser les utilitaires GNUWin32 globalement, vous devez ajouter le dossier bin à votre chemin système.
la source