Question Changer le nom d'un dossier

Plus d'informations
il y a 11 ans 8 mois #17803 par Non
Changer le nom d'un dossier a été créé par Non
Bonjour :) !
Je travaille sous Powershell 2.0

J'ai créé ce script :

[code:1]
Get-ChildItem -path \"$pathArbo\*\*\",\"$pathArbo\*\" | % {
If ($_.Attributes -eq \"Directory\"«»){
Write-Host \"Dossier : $_\"
Write-Host \"Dossier modifié : $(Conv-Rename $_.Name)\"
#Rename-Item ($_.FullName) (Conv-Rename $_.Name)
[System.IO.File]::Move($_ , (Conv-Rename $_.Name))
}
}
[/code:1]

J'ai remplacé le Rename-Item ($_ , (Conv-Rename $_.Name)) par [System.IO.File]::Move($_ , (Conv-Rename $_.Name)) à cause d'un problème généré par les crochets [] qui sont pris comme wildcard.

Malheureusement je n'arrive pas à utiliser cette fonction (même en ayant lu la doc).
L'appel à cette fonction Move me donne un chemin de ce style:
[code:1]« Impossible de trouver le fichier 'C:\scripts\gestiondroits\Test\Niveau 1 - è_é\NIVEAU 2 ---'. »[/code:1]
Mon string est mis entre quotes et un point apparaît à la fin (je ne sais pas d'où il sort).

La fonction Conv-Rename est une fonction prenant un string en paramètre et retournant le string modifié, rien de spécial.

Merci :side:

+Edit: Voici quelque chose qui peut aider, l'erreur complète pour un dossier.

[code:1]Dossier : C:\scripts\gestiondroits\Test\Niveau 1 - è_é\NIVEAU 2 ---
Dossier modifié : NIVEAU-2-
Exception lors de l'appel de « Move » avec « 2 » argument(s) : « Impossible de trouver le fichier 'C:\scripts\gestiondroits\Test\Niveau 1 - è_é\NIVEAU 2 ---'. »
Au niveau de C:\scripts\gestiondroits\conventionnage.ps1 : 77 Caractère : 35
+ [System.IO.File]::Move <<<< ($_ , (Conv-Rename $_.Name))
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException[/code:1]<br><br>Message édité par: Brut4lity, à: 9/07/14 15:39

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 8 mois #17805 par Gabriel
Réponse de Gabriel sur le sujet Re:Changer le nom d'un dossier
et si en lieu et place des varaible tu met les nom en dur, ca marche?

(encapsule tes message d'erreur comme si c'etait du code.)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 8 mois #17806 par Non
Réponse de Non sur le sujet Re:Changer le nom d'un dossier
Avec

[code:1][System.IO.File]::Move('C:\scripts\gestiondroits\Test\Niveau 1 - è_é\TestRenommage[]()[]','TestRenommage')[/code:1]

J'obtient la même erreur

[code:1]Exception lors de l'appel de « Move » avec « 2 » argument(s) : « Impossible de trouver le fichier 'C:\scripts\gestiondroits\Test\Niveau 1 - è_é\TestRenommage[]()[]'. »[/code:1]

Je pense que c'est de la façon dont j'appelle ma fonction.

Question subsidiaire (une fois que ça marchera) : je veux juste renommer.
Si mes dossiers sont remplis (et il le seront de quelques gigas), je n'ai pas envie de le déplacer, juste renommer.

Je n'ai pas trouvé d'informations sur l'implémentation de Move, je ne sais donc pas s'il prend en compte le fait que j'ai le même chemin et qu'il renomme juste.

EDIT:

C'est réglé avec :

[code:1]Move-Item -LiteralPath ($_.FullName) (\&quot;$(Split-Path $_.FullName)\$(Conv-Rename $_.Name)\&quot;«»)[/code:1]

Malheureusement, ma question subsidiaire sur le fonctionnement du Move reste toujours en suspend ^^ !<br><br>Message édité par: Brut4lity, à: 9/07/14 16:17

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 8 mois #17807 par Gabriel
Réponse de Gabriel sur le sujet Re:Changer le nom d'un dossier
de ce que je sais certaines fonctions ont des problèmes avec les caractèress \&quot;[\&quot; et autres

j'ai eu le problème avec start-process
powershell-scripting.com/index.php?optio...id=17728&catid=5

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 8 mois #17809 par Laurent Dardenne
Voir aussi ce post .
tonic8 écrit:

de ce que je sais certaines fonctions ont des problèmes avec les caractères \&quot;[\&quot; et autres

PS propose une amélioration des wildcards, l'équipe à choisi les crochets comme délimiteur.

Du coup il y a des collisions, et afin de préciser si le parseur doit les interpréter dans le nom de fichier, on utilise (-PATH) sinon (-LITERALPATH).

On peut accéder à certaines méthodes via cette variable automatique :
[code:1]
$ExecutionContext.SessionState.Path|gm
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 8 mois #17810 par Non
Réponse de Non sur le sujet Re:Changer le nom d'un dossier
Passer par Move-Item fonctionne bien pour moi maintenant ;) .
J'ai testé en remplissant un dossier et en le renommant avec cette fonction et ça a pris moins d'une seconde. Je pense donc qu'il prend juste en compte le renommage.

Donc finalement j'ai répondu à mes questions moi-même :pinch: .

Sinon j'ai vu pour l'implémentation du LiteralPath, j'avais pensé à faire une fonction moi-même, mais je préférais trouver une bidouille par manque de temps.

Merci :cheer:

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.056 secondes
Propulsé par Kunena