Question [résolu]directoryname.remove(0,3)

Plus d'informations
il y a 12 ans 3 mois #16596 par ZOKI
Bonjour à tous. :woohoo:

j'aimerais copier un certain nombre de fichiers d'un dossier (ceux qui ont été modifiés dans les 7 derniers jours) vers un dossier de destination.
ce dossier de destination doit reprendre le chemin du fichier sans c:\
ex. c:\addons\donnees\fichier.txt vers x:\addons\donnees\fichier.txt

pour cet exemple, ce qui m'interesse c'est de récupérer la chaine addons\donnees.
je suis parti $fichier.DirectoryName).remove(0,3)
là je suis super heureux car j'ai l'information qui m'est nécessaire pour orienter la copie de mon fichier vers le bon répertoire.


voilà une idée que je n'ai pas réussi à exploiter jusqu'au bout

[code:1]
$FIC =@(
Get-ChildItem C:\Addons\ -Recurse | where-object {$_.psiscontainer -eq 0} | Where-Object {$_.LastWriteTime -gt (get-date).AddDays(-7)}
)
foreach ($fichier in $FIC)
{
Copy-Item -Path C:\Addons\Data\$fichier -Destination x:\($fichier.DirectoryName).remove(0,3)
}
[/code:1]
($fichier.DirectoryName).remove(0,3) me permet de récupérer le chemin qui m'est nécessaire pour chacune des occurrences.

je me doutais bien que cette méthode pour diriger la destination de chacun de mes fichiers n'allait pas convenir.
Mais comment puis-je exploiter $fichier.directoryname.remove(0,3) dans mon chemin de destination ?

existe-t-il une autre méthode ?:S

Par avance, merci<br><br>Message édité par: nzo, à: 16/12/13 16:28

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

Plus d'informations
il y a 12 ans 3 mois #16599 par Richard Lazaro
Réponse de Richard Lazaro sur le sujet Re:directoryname.remove(0,3)
Bonjour,

Tout d'abord quand tu postes du code, essayes d'utiliser les balises [ code] [ /code] pour plus de lisiblité.

Tu enchaines deux Where-Object alors que tu peux les combiner avec un AND.

Tu utilises une méthode bizarre alors que tu as la propriété FullName et la méthode SubString dessus.

[code:1]
Get-ChildItem -Path D:\Perso\Documents -Recurse | Where-Object {$_.PSIsContainer -eq $False -and $_.LastWriteTime -gt (Get-Date).AddDays(-7)} | ForEach-Object { Copy-Item -Path $_.FullName -Destination \&quot;X:$($_.FullName.Substring(0,2))\&quot;}
[/code:1]

Ceci devrait fonctionner.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

Plus d'informations
il y a 12 ans 3 mois #16604 par ZOKI
Réponse de ZOKI sur le sujet Re:directoryname.remove(0,3)
Merci Richard pour ta réponse.
j'ai compris que -and va m'éviter de multiplier les where-object
j'ai compris -Path $_.FullName va me permettre de récupérer le chemin pour chacun de mes fichiers concernés

en revanche, je ne comprends pas :

[code:1]
\&quot;X:$($_.FullName.Substring(0,2))\&quot;}
[/code:1]


à quoi sert \&quot;$\&quot; dans ce cas là (cela n'aboutit pas au résultat attendu).

($_.FullName.Substring(0,2) : permet de récupérer seulement les 2 premières lettres de ma chaîne de caractères - je commence à 0 et je prends les deux premières lettres.
J'ai bien compris en revanche l'utilisation de la méthode et de la fonction dans ton exemple.
ça va m'aider dans mon apprentissage.

Merci

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

Plus d'informations
il y a 12 ans 3 mois #16605 par Richard Lazaro
Réponse de Richard Lazaro sur le sujet Re:directoryname.remove(0,3)
Oulà pardon je suis fatigué :o

Oui il manque une partie forcément :

[code:1]
\&quot;X:$($_.FullName.Substring(2,($_.FullName.Length-2)))\&quot;
[/code:1]

concernant le $ :
Les double quotes vont interpreter la chaine de caractère, donc les variable vont être traitées comme tel.
Mais pas l'appel des propriétés :

[code:1]
PS &gt; $a = \&quot;toto\&quot;
PS &gt; \&quot;$a.Length\&quot;
toto.Length
[/code:1]

le $() va permettre de dire a powershell d'interpreter tout ce qu ise trouve entre les parenthèse avant de retourner la valeur

[code:1]
PS &gt; $a = \&quot;toto\&quot;
PS &gt; \&quot;$($a.Length)\&quot;
4
[/code:1]

J'espère avoir été clair.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

Plus d'informations
il y a 12 ans 3 mois #16607 par ZOKI
Réponse de ZOKI sur le sujet Re:directoryname.remove(0,3)
Très clair ! Je retrouve le sourire.
D'une part j'ai appris une chose qui m'échappait avec le $().

D'autre part en voyant le code
[code:1]
\&quot;X:$($_.FullName.Substring(2,($_.FullName.Length-2)))\&quot;
[/code:1]

je me dis : \&quot;mais oui, mais c'est bien sur!\&quot;.
c'est maintenant évident pour moi.
Tellement logique.
Mille mercis :woohoo:

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

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