Question probleme de tri avec Get-Child-Item

Plus d'informations
il y a 11 ans 11 mois #11430 par Thierry S.
Bonjour
je débute ....
merci de votre indulgence ;)

mon script :

[code:1]clear
$a = Get-Date
#
$datejour = get-date -uformat \"%m-%d-20%y\"
#==========================================================================
# SETTING 1 : Le répertoire à scanner.
#==========================================================================
$mydata = \"c:\PATHSOURCE\"
$mytestfile = New-Item c:\PATHSOURCE\emptyfile.txt -type file -force
write-host
$File =
#==========================================================================
# SETTING 2 : Nombre d'heures maxi
#==========================================================================
$hour = \"+12\"

#==========================================================================
# SCRIPT copie :
#==========================================================================
if (Test-Path $mydata)
{
write-host
Write-host \" LE REPERTOIRE SCRUTé EST :\" $mydata -foregroundcolor \"cyan\"
write-host
Write-Host \"Recherche en cours...\" -foregroundcolor \"green\"
Start-sleep -s 1
#
$jour = get-date
$lastmod = $jour.Addhours(-$hour)
$pathfile = \"Copy_Du_\"+$a.Day+\"_\"+$a.Month+\"_\"+$a.Year+\"_\"+$a.Hour+\"h\"+$a.Minute+\"min\"+$a.Second+\"sec\"
$pathcopy = new-item -path \"C:\PATHCIBLE\" -name $pathfile -type directory
#
$Files = Get-ChildItem $mydata -include NJ_ETAT.*,NJA_C.*,K2U_ONC.*,
X01_R.* -recurse |Where {$_.LastWriteTime -gt \"$lastmod\"} |Where {$_.length -lt 2000000}
#
foreach ($File in $Files)
{
write-host \"Fichier \" -nonewline; write-host \"$File\" -foregroundcolor \"green\";
Copy-Item $File $pathcopy
}
}
Else
{
Write-Host \"Le Repertoire $mydata n'existe pas !\"
}
write-host
write-host
write-host
write-host
write-host
remove-Item $mytestfile
remove-Item $pathcopy\emptyfile.txt[/code:1]


Alors ce script est censé :


1 ) trier dans le répertoire PATHSOURCE les fichiers

NJ_ETAT.*,
NJA_C.*,
K2U_ONC.*,
X01_R.*
dont la date n'excède pas 12heures et dont le poids ne dépasse pas 2 mo.

2 ) copier dans le répertoire PATHCIBLE
tous les fichiers qui répondent aux 3 conditions (filename length et lastwritetime)


le 1er soucis est
que si les conditions ne sont pas réunies mon script plante .
D'ou le petit emptyfile.txt que je créé et qui permet de lancer le script sans planter.
comment faire un test sur les conditions et ne pas planter sans utiliser cette astuce du \"emptyfile\" ?

le 2eme soucis :
mon path CIBLE était créé a l'origine dans le repertoire source
(création de ce sous-tep cible en récupérant les properties de get-date en minutes-secondes etc...)

Le probleme est que la commande -recurse me remonte les copies fraichement effectuées a chaque lancement.

je voudrais donc faire un Get-ChildItem non récursif??
mais des que je retire le switch -recurse ça plante.


Merci de votre aide .....<br><br>Message édité par: Thierry94, à: 4/04/12 17:13

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

Plus d'informations
il y a 11 ans 11 mois #11437 par MEURY Nikolaus
Salut,

Déjà ton test sur le répertoire \&quot;pathsource\&quot; ne sert pas à grand chose puisque tu forces la création d'un fichier dans cette arbo :

[code:1]$mytestfile = New-Item c:\PATHSOURCE\emptyfile.txt -type file -force[/code:1]


Sinon pour Test-Path la syntaxe c'est :

[code:1]Test-Path -path d:\toto[/code:1]

ça te retourne un booléen.

J'aurais écris le test autrement perso, mais je débute également donc je ne suis peut être pas de très bon conseil :

[code:1]
$check = $false
$check = Test-Path -path $mydata

if ($check -ne $true)
{
echo \&quot;Le Repertoire $mydata n'existe pas !\&quot;
exit
}
Elseif ($check -eq $true)
{
echo \&quot;Le Repertoire $mydata existe\&quot;
}
[/code:1]

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

Plus d'informations
il y a 11 ans 11 mois #11439 par brutosaure
Mon commentaire n'est pas là pour te donner une solution, mais juste pour te dire que pour ce test, tu peux faire comme ça:

$Files = Get-ChildItem $mydata -include NJ_ETAT.*,NJA_C.*,K2U_ONC.*,X01_R.* -recurse | ?{($_.LastWriteTime -gt \&quot;$lastmod\&quot;) -and ($_.length -lt 2000000)}

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

Plus d'informations
il y a 11 ans 10 mois #11451 par Thierry S.
Nicky écrit:

Salut,

Déjà ton test sur le répertoire \&quot;pathsource\&quot; ne sert pas à grand chose puisque tu forces la création d'un fichier dans cette arbo :

[code:1]$mytestfile = New-Item c:\PATHSOURCE\emptyfile.txt -type file -force[/code:1]


Sinon pour Test-Path la syntaxe c'est :

[code:1]Test-Path -path d:\toto[/code:1]

ça te retourne un booléen.

J'aurais écris le test autrement perso, mais je débute également donc je ne suis peut être pas de très bon conseil :

[code:1]
$check = $false
$check = Test-Path -path $mydata

if ($check -ne $true)
{
echo \&quot;Le Repertoire $mydata n'existe pas !\&quot;
exit
}
Elseif ($check -eq $true)
{
echo \&quot;Le Repertoire $mydata existe\&quot;
}
[/code:1]


Hello
en fait c'est pas temps le test d'existence de rep qui me pose probleme, puisque , comme tu le dis, je force la création d'un file.
C'est justement par cette Astuce que j'évite de planter.
je ne veux pas tester l'existence d'un rep, mais son contenu (vide ou non)
Quand il est vide, je plance, d'ou la présence d'un TXT (de - de 12h de - de 2mo et ajouté au recherche dans le gci)


Une idée ? comme tester un contenu de rep vide sans passer par l'astuce (création txt)...<br><br>Message édité par: Thierry94, à: 5/04/12 16:34

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

Plus d'informations
il y a 11 ans 10 mois #11452 par Thierry S.
brutosaure écrit:

Mon commentaire n'est pas là pour te donner une solution, mais juste pour te dire que pour ce test, tu peux faire comme ça:

$Files = Get-ChildItem $mydata -include NJ_ETAT.*,NJA_C.*,K2U_ONC.*,X01_R.* -recurse | ?{($_.LastWriteTime -gt \&quot;$lastmod\&quot;) -and ($_.length -lt 2000000)}


ok, sympa :)
ça m'évite d'écrire \&quot;where\&quot; plusieurs fois :)

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

Plus d'informations
il y a 11 ans 10 mois #11453 par Yves Campmas
Tu peux utilisé justement get-childitem pour le tester. Si le répertoire est vide, il te retourne un null.

[code:1]
if ((Test-Path $mydata) -and (gci $mydata)) {
$true
}
else {
$false
}

[/code:1]

Et pour ton deuxième soucis, précise à la fin du chemin de ton dossier que c'est le contenu que tu veux récupérer avec une *. Essaye ceci :

[code:1]
Get-ChildItem \&quot;c:\PATHSOURCE\*\&quot;-include NJ_ETAT.*,NJA_C.*,K2U_ONC.*,X01_R.*
[/code:1]<br><br>Message édité par: yvesca, à: 5/04/12 17:56

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

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