Estoy tratando de cambiar el nombre de un grupo de archivos de forma recursiva con Powershell 2.0. La estructura de directorios es el siguiente:Cambiar el nombre de los archivos a minúsculas en Powershell
Leaflets
+ HTML
- File1
- File2
...
+ HTMLICONS
+ IMAGES
- Image1
- Image2
- File1
- File2
...
+ RTF
- File1
- File2
...
+ SGML
- File1
- File2
...
estoy usando el siguiente comando:
get-childitem Leaflets -recurse | rename -newname { $_.name.ToLower() }
y parece que cambiar el nombre de los archivos, pero se queja de los subdirectorios:
Rename-Item : Source and destination path must be different.
I recarga los datos mensualmente usando robocopy, pero los directorios no cambian, así que puedo cambiarles el nombre a mano. ¿Hay alguna forma de obtener get-children
para omitir los subdirectorios (como find Leaflets -type f ...
)?
Gracias.
ACTUALIZACIÓN: Parece que el problema está en los archivos que ya están en minúsculas. He intentado cambiar el comando para:
get-childitem Leaflets -recurse | if ($_.name -ne $_name.ToLower()) rename -newname { $_.name.ToLower() }
pero ahora se queja de que Powershell if
no es un cmdlet, función, etc. ¿Puedo canalizar la salida de get-childitem
un comunicado if
?
ACTUALIZACIÓN 2: Esto funciona:
$files=get-childitem Leaflets -recurse
foreach ($file in $files)
{
if ($file.name -ne $file.name.ToLower())
{
rename -newname { $_.name.ToLower() }
}
}
Gracias. Y para cambiar los nombres de los archivos podemos usar esto: gci. -recurse -force | ? {! $ _. PSIsContainer} | rni -New {$ _. Name.replace ("aaa", "bbb")} –