Actualmente tengo una línea a la hornada cambiar el nombre de archivos en una carpeta en la que estoy actualmente.

dir | foreach { move-item -literal $_ $_.name.replace(".mkv.mp4",".mp4") }

Este código funciona perfectamente para cualquier directorio actualmente estoy en el, pero lo que quiero es ejecutar una secuencia de comandos desde una carpeta principal que contiene 11 de niño-carpetas. Puedo realizar mi tarea navegando a cada una de las carpetas, pero prefiero correr el script una vez y listo.

He intentado lo siguiente:

get-childitem -recurse | foreach { move-item -literal $_ $_.name.replace(".mkv.mp4",".mp4") }

Puede alguien por favor me apunte en la dirección correcta aquí? No estoy muy familiarizado con Powershell, pero es más adecuado a mis necesidades en esta instancia.

posibles duplicados de de forma recursiva el cambio de nombre de archivos en Powershell
Gracias por señalarme a ese hilo. Sin embargo, todavía estoy teniendo dificultades, aun después de haber leído las respuestas de la otra pregunta. Estoy consiguiendo no existe el archivo o el archivo está siendo utilizado por otro proceso.

OriginalEl autor Matthew | 2014-02-06

2 Comentarios

  1. 24

    Que estaban cerca de:

    Get-ChildItem -File -Recurse | % { Rename-Item -Path $_.PSPath -NewName $_.Name.replace(".mkv.mp4",".mp4")}
    Gracias por tu respuesta, pero me da el siguiente ahora: Move-Item : The process cannot access the file because it is being used by another process. At line:1 char:45 + get-childitem -recurse | foreach { move-item <<<< -literal $_.FullName $_.FullName.replace(".mkv.mp4",".mp4") } + CategoryInfo : WriteError: (D:\The Wire\Season 1:DirectoryInfo) [Move-Item], IOException + FullyQualifiedErrorId : MoveDirectoryItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand
    Yo creo que era porque estaban usando move-elemento en lugar de cambiar el nombre-objeto, fijo mi post
    Esto se ha resuelto el problema. Yo estaba usando move-item, ya que hay entre corchetes en todos los nombres de archivo y cambiar el nombre del elemento no estaba funcionando para mí antes. Un millón de gracias por tu ayuda.
    Cannot rename because item at 'Settings.png' does not exist. Funciona en la raíz, pero dentro de un niño carpeta en la que se produce un error.
    Actualizado para ser más específicos acerca de los trazados.

    OriginalEl autor Cole9350

  2. 30

    Allí no es una característica bien conocida de que fue diseñado para este escenario. Brevemente, se puede hacer algo como:

    Get-ChildItem -Recurse -Include *.ps1 | Rename-Item -NewName { $_.Name.replace(".ps1",".ps1.bak") }

    Esto evita el uso de ForEach-Object pasando de un bloque script para el parámetro NewName. PowerShell es lo suficientemente inteligente como para evaluar el bloque script para cada objeto que se obtiene de corriente, ajuste de $_ igual que se haría con ForEach-Object.

    He probado esto en powershell 2.0 y sólo funciona para 1 carpeta, y no recurse en subcarpetas…
    Acabo de actualizar el fragmento de código para trabajar con V2 – es necesario -Incluir. V3 es un poco más inteligente y no necesita -Incluir.
    Dulce, +1 para hacerlo sin un foreach
    Pasaba muchas horas leyendo posts sobre foreach etc que no trabajan para las carpetas secundarias. Esta es la única cosa en la que trabajaba.
    funciona como un encanto.

    OriginalEl autor Jason Shirk

Dejar respuesta

Please enter your comment!
Please enter your name here