Question
[Résolu]Après quelques itérations, plus rien...
- chailloleau
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 13 ans 1 mois #14032
par chailloleau
[Résolu]Après quelques itérations, plus rien... a été créé par chailloleau
Bonjour, je débute en ps, et en regardant un peu sur le web, j'ai réussi à faire un script pour surveiller un dossier, renommer, copier, renommer puis effacer les originaux...
Cela fonctionne 'mal' puisque après quelques passes qui sont ok, plus de copie, renommage et autre : il n'y a plus rien qui se passe...
Quelques conseils et analyse seraient les bienvenus !
[code:1]
$tempo = 5
$derniercheck = get-date
$rep =\"d:\Export CR\\"
$ficrep =\"d:\Export CR\*\"
$cible = \"d:\Cible\\"
cd $rep
$ancien = get-childitem $rep -r
while ($derniercheck -ne $null)
{
$actuel = get-childitem $rep -r
\"--> test : $actuel\"
if ($actuel -ne $nul) { # Il y a des fichiers présents dans le dossier
\"On déplace !\"
# On change les extensions des fichiers avant tout
get-childitem -Path *.xml |rename-item -NewName {$_.name -replace \".xml$\",\".cc1\"}
get-childitem -Path *.pdf |rename-item -NewName {$_.name -replace \".pdf$\",\".cc2\"}
# On supprime tous les autres fichiers
get-childitem * -exclude *.cc* -recurse | remove-item
#On copie les fichiers dans le répertoire cible (en théorie seulement les miens !)
Copy-Item $ficrep -Include *.cc* -Destination $cible -Recurse -Force
# On renomme
cd $cible
get-childitem -Path *.cc1 |rename-item -NewName {$_.name -replace \".cc1$\",\".xml\"}
get-childitem -Path *.cc2 |rename-item -NewName {$_.name -replace \".cc2$\",\".pdf\"}
# On efface les originaux en évitant ceux qui seraient arrivés entre temps
Get-ChildItem $rep -include *.cc* -recurse | remove-item
}
$derniercheck = get-date
\"$derniercheck\"
$actuel = \"\"
start-sleep -s $tempo
}[/code:1]
Message édité par: titeufcc, à: 20/02/13 18:42<br><br>Message édité par: titeufcc, à: 21/02/13 12:22
Cela fonctionne 'mal' puisque après quelques passes qui sont ok, plus de copie, renommage et autre : il n'y a plus rien qui se passe...
Quelques conseils et analyse seraient les bienvenus !
[code:1]
$tempo = 5
$derniercheck = get-date
$rep =\"d:\Export CR\\"
$ficrep =\"d:\Export CR\*\"
$cible = \"d:\Cible\\"
cd $rep
$ancien = get-childitem $rep -r
while ($derniercheck -ne $null)
{
$actuel = get-childitem $rep -r
\"--> test : $actuel\"
if ($actuel -ne $nul) { # Il y a des fichiers présents dans le dossier
\"On déplace !\"
# On change les extensions des fichiers avant tout
get-childitem -Path *.xml |rename-item -NewName {$_.name -replace \".xml$\",\".cc1\"}
get-childitem -Path *.pdf |rename-item -NewName {$_.name -replace \".pdf$\",\".cc2\"}
# On supprime tous les autres fichiers
get-childitem * -exclude *.cc* -recurse | remove-item
#On copie les fichiers dans le répertoire cible (en théorie seulement les miens !)
Copy-Item $ficrep -Include *.cc* -Destination $cible -Recurse -Force
# On renomme
cd $cible
get-childitem -Path *.cc1 |rename-item -NewName {$_.name -replace \".cc1$\",\".xml\"}
get-childitem -Path *.cc2 |rename-item -NewName {$_.name -replace \".cc2$\",\".pdf\"}
# On efface les originaux en évitant ceux qui seraient arrivés entre temps
Get-ChildItem $rep -include *.cc* -recurse | remove-item
}
$derniercheck = get-date
\"$derniercheck\"
$actuel = \"\"
start-sleep -s $tempo
}[/code:1]
Message édité par: titeufcc, à: 20/02/13 18:42<br><br>Message édité par: titeufcc, à: 21/02/13 12:22
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 13 ans 1 mois #14033
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Après quelques itérations, plus rien...
Bonsoir,
Pour ce que tu as à faire, la boucle 'While' reste discutable (attention aux \"boucles éternelles\"). As tu regardé la CPU pendant l'exécution de ton script ?
Peut être vaut-il mieux que tu te tournes vers les events WMI. Pour l'exemple, on en parle ici ou encore ici : Use PowerShell to Monitor for the Creation of New Files (et un peut partout sur le Web d'ailleurs, ton moteur de recherche préféré pourra te servir
).
Quelques remarques sur ton code :
[code:1]if ($actuel -ne $nul)[/code:1]
$nul : il manque un \"l\" => $null
Ici
[code:1]$actuel = \"\"[/code:1]
Tu ré initialises la variable '$actuel' avec un 'String' vide. Ce n'est donc pas une valeur 'null'.
[code:1]PS C:\>$actuel = \"\"
PS C:\>$actuel -eq $null
False
PS C:\>$actuel -eq \"\"
True[/code:1]
Comme tu fais dans le 'if' de la boucle un test sur la valeur $null, j'initialiserai plutôt '$actuel' avec la valeur $null.
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 20/02/13 21:13
Pour ce que tu as à faire, la boucle 'While' reste discutable (attention aux \"boucles éternelles\"). As tu regardé la CPU pendant l'exécution de ton script ?
Peut être vaut-il mieux que tu te tournes vers les events WMI. Pour l'exemple, on en parle ici ou encore ici : Use PowerShell to Monitor for the Creation of New Files (et un peut partout sur le Web d'ailleurs, ton moteur de recherche préféré pourra te servir
Cela fonctionne 'mal' puisque après quelques passes qui sont ok, plus de copie, renommage et autre : il n'y a plus rien qui se passe...
Quelques remarques sur ton code :
[code:1]if ($actuel -ne $nul)[/code:1]
$nul : il manque un \"l\" => $null
Ici
[code:1]$actuel = \"\"[/code:1]
Tu ré initialises la variable '$actuel' avec un 'String' vide. Ce n'est donc pas une valeur 'null'.
[code:1]PS C:\>$actuel = \"\"
PS C:\>$actuel -eq $null
False
PS C:\>$actuel -eq \"\"
True[/code:1]
Comme tu fais dans le 'if' de la boucle un test sur la valeur $null, j'initialiserai plutôt '$actuel' avec la valeur $null.
@ +
Matthew<br><br>Message édité par: Matthew BETTON, à: 20/02/13 21:13
Connexion ou Créer un compte pour participer à la conversation.
- chailloleau
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 13 ans 1 mois #14034
par chailloleau
Réponse de chailloleau sur le sujet Re:Après quelques itérations, plus rien...
Merci pour toutes ces informations...
Je regardes les events WMI
Christophe
Je regardes les events WMI
Christophe
Connexion ou Créer un compte pour participer à la conversation.
- chailloleau
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 13 ans 1 mois #14038
par chailloleau
Réponse de chailloleau sur le sujet Re:Après quelques itérations, plus rien...
Il manquait un retour dans le bon dossier... 
Donc, en fait, cela ne fonctionnait que lors de la première itération seulement !
Donc, en fait, cela ne fonctionnait que lors de la première itération seulement !
Connexion ou Créer un compte pour participer à la conversation.
- Matthew BETTON
- Hors Ligne
- Membre platinium
-
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 13 ans 1 mois #14059
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:Après quelques itérations, plus rien...
titeufcc écrit:
Effectivement, je n'avais pas vu le
[code:1]
cd $cible[/code:1]
dans ton bloc 'if'.
Il manquait un retour dans le bon dossier...
Donc, en fait, cela ne fonctionnait que lors de la première itération seulement !
Effectivement, je n'avais pas vu le
[code:1]
cd $cible[/code:1]
dans ton bloc 'if'.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.048 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu]Après quelques itérations, plus rien...