J'essaye de renommer un tas de fichiers récursivement en utilisant Powershell 2.0. La structure du répertoire ressemble à ceci:Renommer les fichiers en minuscules dans Powershell
Leaflets
+ HTML
- File1
- File2
...
+ HTMLICONS
+ IMAGES
- Image1
- Image2
- File1
- File2
...
+ RTF
- File1
- File2
...
+ SGML
- File1
- File2
...
J'utilise la commande suivante:
get-childitem Leaflets -recurse | rename -newname { $_.name.ToLower() }
et il semble renommer les fichiers, mais se plaint des sous-répertoires:
Rename-Item : Source and destination path must be different.
I recharger les données mensuellement en utilisant robocopy, mais les répertoires ne changent pas, donc je peux les renommer à la main. Est-il possible d'obtenir get-children
pour ignorer les sous-répertoires (comme find Leaflets -type f ...
)?
Merci.
MISE À JOUR: Il semble que le problème concerne les fichiers qui sont déjà tous en minuscules. J'ai essayé de changer la commande:
get-childitem Leaflets -recurse | if ($_.name -ne $_name.ToLower()) rename -newname { $_.name.ToLower() }
mais maintenant Powershell se plaint que if
n'est pas une applet de commande, fonction, etc. Puis-je redirigez la sortie de get-childitem
à une déclaration if
?
MISE À JOUR 2: Cela fonctionne:
$files=get-childitem Leaflets -recurse
foreach ($file in $files)
{
if ($file.name -ne $file.name.ToLower())
{
rename -newname { $_.name.ToLower() }
}
}
Merci. Et pour changer les noms de fichiers, nous pouvons utiliser ceci: gci. -recurse -force | ? {! $ _. PSIsContainer} | rni -New {$ _. Name.replace ("aaa", "bbb")} –