Question
[résolu]directoryname.remove(0,3)
- ZOKI
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 19
- Remerciements reçus 0
il y a 12 ans 3 mois #16596
par ZOKI
[résolu]directoryname.remove(0,3) a été créé par ZOKI
Bonjour à tous. 
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 ?
Par avance, merci<br><br>Message édité par: nzo, à: 16/12/13 16:28
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 ?
Par avance, merci<br><br>Message édité par: nzo, à: 16/12/13 16:28
Connexion ou Créer un compte pour participer à la conversation.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 12 ans 3 mois #16599
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
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 \"X:$($_.FullName.Substring(0,2))\"}
[/code:1]
Ceci devrait fonctionner.
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 \"X:$($_.FullName.Substring(0,2))\"}
[/code:1]
Ceci devrait fonctionner.
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- ZOKI
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 19
- Remerciements reçus 0
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]
\"X:$($_.FullName.Substring(0,2))\"}
[/code:1]
à quoi sert \"$\" 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
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]
\"X:$($_.FullName.Substring(0,2))\"}
[/code:1]
à quoi sert \"$\" 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.
- Richard Lazaro
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 530
- Remerciements reçus 0
il y a 12 ans 3 mois #16605
par Richard Lazaro
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
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]
\"X:$($_.FullName.Substring(2,($_.FullName.Length-2)))\"
[/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 > $a = \"toto\"
PS > \"$a.Length\"
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 > $a = \"toto\"
PS > \"$($a.Length)\"
4
[/code:1]
J'espère avoir été clair.
Oui il manque une partie forcément :
[code:1]
\"X:$($_.FullName.Substring(2,($_.FullName.Length-2)))\"
[/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 > $a = \"toto\"
PS > \"$a.Length\"
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 > $a = \"toto\"
PS > \"$($a.Length)\"
4
[/code:1]
J'espère avoir été clair.
Think-MS : (Get-Life).Days | %{ Learn-More }
\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein
Connexion ou Créer un compte pour participer à la conversation.
- ZOKI
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 19
- Remerciements reçus 0
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]
\"X:$($_.FullName.Substring(2,($_.FullName.Length-2)))\"
[/code:1]
je me dis : \"mais oui, mais c'est bien sur!\".
c'est maintenant évident pour moi.
Tellement logique.
Mille mercis
D'une part j'ai appris une chose qui m'échappait avec le $().
D'autre part en voyant le code
[code:1]
\"X:$($_.FullName.Substring(2,($_.FullName.Length-2)))\"
[/code:1]
je me dis : \"mais oui, mais c'est bien sur!\".
c'est maintenant évident pour moi.
Tellement logique.
Mille mercis
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.056 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [résolu]directoryname.remove(0,3)