vez varios subcarpetas renombrar por parte nombres nombre lotes lote extension como carpetas cambiar archivos archivo ala powershell

varios - Pasa el cursor por los archivos en un directorio usando PowerShell



renombrar carpetas por lote (4)

¿Cómo puedo cambiar el siguiente código para ver todos los archivos .log en el directorio y no solo el archivo?

Necesito recorrer todos los archivos y eliminar todas las líneas que no contengan "step4" o "step9". Actualmente esto creará un nuevo archivo, pero no estoy seguro de cómo usarlo for each ciclo 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 "salir".

$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


Otras respuestas son geniales, solo quiero agregar ... un enfoque diferente utilizable en PowerShell: Instalar utilidades GNUWin32 y usar grep para ver las líneas / redirigir la salida al archivo http://gnuwin32.sourceforge.net/

Esto sobrescribe el nuevo archivo cada vez:

grep "step[49]" logIn.log > logOut.log

Esto agrega la salida de registro, en caso de que sobrescriba el archivo de inicio de sesión y desee conservar los datos:

grep "step[49]" logIn.log >> logOut.log

Nota: para poder usar utilidades GNUWin32 globalmente, debe agregar la carpeta bin a la ruta del sistema.


Para obtener el contenido de un directorio, puede usar

$files = Get-ChildItem "C:/Users/gerhardl/Documents/My Received Files/"

Entonces también puedes recorrer esta variable:

for ($i=0; $i -lt $files.Count; $i++) { $outfile = $files[$i].FullName + "out" Get-Content $files[$i].FullName | Where-Object { !($_ -match ''step4'' -or $_ -match ''step9'') } | Set-Content $outfile }


Prueba esto:

Get-ChildItem "C:/Users/gerhardl/Documents/My Received Files" -Filter *.log | Foreach-Object { $content = Get-Content $_.FullName #filter and save content to the original file $content | Where-Object {$_ -match ''step[49]''} | Set-Content $_.FullName #filter and save content to a new file $content | Where-Object {$_ -match ''step[49]''} | Set-Content ($_.BaseName + ''_out.log'') }


Si necesita realizar un bucle dentro de un directorio de forma recursiva para un tipo particular de archivo, use el siguiente comando, que filtra todos los archivos del tipo de archivo doc .

$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc

Si necesita filtrar en varios tipos, use el siguiente comando.

$fileNames = Get-ChildItem -Path $scriptPath -Recurse -Include *.doc,*.pdf

Ahora la variable $fileNames actúa como una matriz desde la que puede hacer un bucle y aplicar su lógica comercial.