¿Cómo puedo cambiar el siguiente código para ver todos los archivos .log en el directorio y no solo un archivo?
Necesito recorrer todos los archivos y eliminar todas las líneas que no contienen "step4" o "step9". Actualmente, esto creará un nuevo archivo, pero no estoy seguro de cómo usar el for each
bucle aquí (novato).
Los archivos reales se nombran así: 2013 09 03 00_01_29.log . Me gustaría que los archivos de salida los sobrescriban, o que tengan el MISMO nombre, junto con "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
usuario2725402
fuente
fuente
BaseName
conFullName
, obtengo lo que quiero.Para obtener el contenido de un directorio puede usar
Entonces puedes recorrer esta variable también:
Una forma aún más fácil de poner esto es el
foreach
bucle (gracias a @Soapy y @MarkSchultheiss):fuente
$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 necesita recorrer dentro de un directorio de forma recursiva para un tipo particular de archivo, use el siguiente comando, que filtra todos los archivos de
doc
tipo de archivo$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc
Si necesita hacer la filtración en varios tipos, use el siguiente comando.
$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc,*.pdf
Ahora las
$fileNames
variables actúan como una matriz desde la que puede recorrer y aplicar su lógica empresarial.fuente
-Force
parámetro Get-ChildItem. Vea su documento en docs.microsoft.com/en-us/powershell/module/… .Otras respuestas son geniales, solo quiero agregar ... un enfoque diferente que se puede usar en PowerShell: instale utilidades GNUWin32 y use grep para ver las líneas / redirigir la salida al archivo http://gnuwin32.sourceforge.net/
Esto sobrescribe el nuevo archivo cada vez:
Esto agrega la salida del registro, en caso de que sobrescriba el archivo logIn y desee conservar los datos:
Nota: para poder utilizar utilidades GNUWin32 a nivel mundial, debe agregar la carpeta bin a la ruta del sistema.
fuente