none
Script renombrar ficheros RRS feed

  • 问题

  • Hola Buenas tardes

    Necesitaria vuestra ayuda para crear un script que renombrar ficheros en directorios y subdirectorios

    Ahora los fichero tienes 20 digitos ejemplo

    00000000000000000010.txt

    00000000000000000100.txt

    00000000000000003000.txt

    00000000000000003500.txt

    Necesito sumarle 300 a cada fichero para que quedaran asi

    00000000000000000310.txt

    00000000000000000400.txt

    00000000000000003300.txt

    00000000000000003800.txt

    Cual seria la mejor forma de hacerlo, son millones de fichero

    Muchas gracias de antemano

    Saludos

    2020年5月20日 17:23

答案

  • Hola Iniabele,

    Podrías hacerlo así:

    Clear-Host
    $FilePath = "C:\Temp\Test" #Ruta donde están tus ficheros
    $Files = Get-ChildItem $FilePath
    ForEach ($Item in $Files)
    {
    	[string]$Name = $Item.BaseName
    	[int]$NewNameValue = [int]$Name + 300
    	[String]$NewName = '{0:d20}' -f [int]$NewNameValue
    	Write-Output "$Name se renombra a: $NewName" 
    	Rename-Item $Item.FullName -NewName $NewName
    }
    

    Está sin probar, por lo que te recomiendo que primero hagas pruebas en un pequeño directorio controlado para verificar que no se me pasó por alto nada al escribirlo.

    Espero que te sirva.

    Un saludo.

    Diego

    • 已标记为答案 Iniabele 2020年5月21日 21:36
    2020年5月21日 15:31

全部回复

  • Hola Iniabele,

    Podrías hacerlo así:

    Clear-Host
    $FilePath = "C:\Temp\Test" #Ruta donde están tus ficheros
    $Files = Get-ChildItem $FilePath
    ForEach ($Item in $Files)
    {
    	[string]$Name = $Item.BaseName
    	[int]$NewNameValue = [int]$Name + 300
    	[String]$NewName = '{0:d20}' -f [int]$NewNameValue
    	Write-Output "$Name se renombra a: $NewName" 
    	Rename-Item $Item.FullName -NewName $NewName
    }
    

    Está sin probar, por lo que te recomiendo que primero hagas pruebas en un pequeño directorio controlado para verificar que no se me pasó por alto nada al escribirlo.

    Espero que te sirva.

    Un saludo.

    Diego

    • 已标记为答案 Iniabele 2020年5月21日 21:36
    2020年5月21日 15:31
  • Muchas gracias

    Funciona perfectamente , lo unico que me borra la extension de los ficheros

    Muchas gracias, has sido de gran ayuda

    2020年5月21日 21:04
  • Otra forma de hacerlo, desde la raiz donde están los ficheros, ejecuta esto:

    Get-ChildItem | %{ Rename-Item -path $_ -newname ([string]([int]($_.basename)+300)+$_.Extension)}

    2020年5月21日 23:30
  • Hola,

    Lo corrijo para que no borre la extensión:

    Clear-Host
    $FilePath = "C:\Temp\Test"
    $Files = Get-ChildItem $FilePath
    ForEach ($Item in $Files)
    {
    	[string]$Name = $Item.BaseName
    	[int]$NewNameValue = [int]$Name + 300
    	[String]$NewName = '{0:d20}' -f [int]$NewNameValue
    	$NewName += ".txt"
    	Write-Output "$Name se renombra a: $NewName" 
    	Rename-Item $Item.FullName -NewName $NewName
    }

    Me alegro que te sirviera.

    Un saludo.

    Diego

    2020年5月22日 10:25