Bonjour,
je cherche un bout de code qui vérifie l'existance d'un fichier , et si il
n'existe pas son nom sera écrit dans un fichier.
J'ai essayé cela
if not exist monfichier1.log then echo 'monfichier.log' >>
fichier_manquant.txt
Mais cela ne marche pas.
Voulez-vous m'aider ?
D'avance merci.
"big" a écrit dans le message de news: | Gilles, | autant pour moi, ça marche , c'est ok. Le seul bémole , dans le | répertoire il y a un fichier du nom FICHIER_LOGS_20070604.rar, pour | l'instant je le sort du répertoir pour faire marcher ton code car il | prend le 2007060 comme le premier et la boucle sera faussée, aucun | fichier manquant détécté. Comment peut-on exclure ceci ? | D'avance merci.
En ne traitant que les fichiers .log :
' recherche des bornes oRe.Pattern=".log": oRe.IgnoreCase=True For Each oFile In colFiles If oRe.Test (oFile.name) Then If IsEmpty (arrFiles(0)) Then arrFiles(0)=oFile.Name arrFiles(1)=oFile.Name End If Next
-- Gilles LAURENT http://glsft.free.fr
merci infiniment Gilles, ça marche.
"big" <big@discussions.microsoft.com> a écrit dans le message de
news:0F31F9F3-90E4-4C94-8025-93F2B266D53D@microsoft.com
| Gilles,
| autant pour moi, ça marche , c'est ok. Le seul bémole , dans le
| répertoire il y a un fichier du nom FICHIER_LOGS_20070604.rar, pour
| l'instant je le sort du répertoir pour faire marcher ton code car il
| prend le 2007060 comme le premier et la boucle sera faussée, aucun
| fichier manquant détécté. Comment peut-on exclure ceci ?
| D'avance merci.
En ne traitant que les fichiers .log :
' recherche des bornes
oRe.Pattern=".log": oRe.IgnoreCase=True
For Each oFile In colFiles
If oRe.Test (oFile.name) Then
If IsEmpty (arrFiles(0)) Then arrFiles(0)=oFile.Name
arrFiles(1)=oFile.Name
End If
Next
"big" a écrit dans le message de news: | Gilles, | autant pour moi, ça marche , c'est ok. Le seul bémole , dans le | répertoire il y a un fichier du nom FICHIER_LOGS_20070604.rar, pour | l'instant je le sort du répertoir pour faire marcher ton code car il | prend le 2007060 comme le premier et la boucle sera faussée, aucun | fichier manquant détécté. Comment peut-on exclure ceci ? | D'avance merci.
En ne traitant que les fichiers .log :
' recherche des bornes oRe.Pattern=".log": oRe.IgnoreCase=True For Each oFile In colFiles If oRe.Test (oFile.name) Then If IsEmpty (arrFiles(0)) Then arrFiles(0)=oFile.Name arrFiles(1)=oFile.Name End If Next
-- Gilles LAURENT http://glsft.free.fr
big
merci Jacques, mais de quelle manier lancer ton script et lui donner le répertoire de recherche ? Cdt.
"Gilles LAURENT" wrote in message news:
"big" a écrit dans le message de news: | Gilles,
Big !
Et une version PowerShell, une! :-)
--- get-missinglogs.ps1 --- $files = dir k00*.log | sort | foreach {$_.name} $first = [int] $files[0].substring(3,5) $last = [int] $files[-1].substring(3,5) for ($i = $first; $i -le $last; $i++) { $file = "k00{0:d5}.log" -f $i if ($files -notcontains $file) { $file >> missinglogs.log } } --- fin de script ---
Jacques
merci Jacques, mais de quelle manier lancer ton script et lui donner le
répertoire de recherche ?
Cdt.
"Gilles LAURENT" <glsft@free.fr> wrote in message
news:O8iTcE0pHHA.208@TK2MSFTNGP05.phx.gbl...
"big" <big@discussions.microsoft.com> a écrit dans le message de
news:01052104-75E1-4A01-AC59-ACE044A04FCA@microsoft.com
| Gilles,
Big !
Et une version PowerShell, une! :-)
--- get-missinglogs.ps1 ---
$files = dir k00*.log | sort | foreach {$_.name}
$first = [int] $files[0].substring(3,5)
$last = [int] $files[-1].substring(3,5)
for ($i = $first; $i -le $last; $i++) {
$file = "k00{0:d5}.log" -f $i
if ($files -notcontains $file) {
$file >> missinglogs.log
}
}
--- fin de script ---
merci Jacques, mais de quelle manier lancer ton script et lui donner le répertoire de recherche ? Cdt.
"Gilles LAURENT" wrote in message news:
"big" a écrit dans le message de news: | Gilles,
Big !
Et une version PowerShell, une! :-)
--- get-missinglogs.ps1 --- $files = dir k00*.log | sort | foreach {$_.name} $first = [int] $files[0].substring(3,5) $last = [int] $files[-1].substring(3,5) for ($i = $first; $i -le $last; $i++) { $file = "k00{0:d5}.log" -f $i if ($files -notcontains $file) { $file >> missinglogs.log } } --- fin de script ---
Jacques
Jacques Barathon [MS]
"big" wrote in message news:
merci Jacques, mais de quelle manier lancer ton script et lui donner le répertoire de recherche ? Cdt.
Il faut avoir installé Windows PowerShell sur le serveur (ou l'installer sur un poste à partir duquel tu peux éventuellement faire un "dir" du serveur). Tu trouveras les liens vers la doc et l'installation de PowerShell ici:
Attention, il faut avoir le .NET Framework v2 pour pouvoir installer PowerShell. Les systèmes supportés sont XP SP2, Windows Server 2003 et Vista (32 ou 64bits pour chaque). PowerShell est maintenant inclus dans Windows Server 2008.
Une fois PowerShell installé et correctement configuré (je pense notamment à l'autorisation d'exécution des scripts locaux - voir les messages d'aide affichés au lancement de ta première session PowerShell), tu peux sauvegarder le texte dans un fichier portant l'extension .ps1 - par exemple get-missinglogs.ps1 - et l'exécuter ainsi:
.get-missinglogs.ps1
La syntaxe utilisée ci-dessus suppose que le script est dans le répertoire en cours. Si ce n'est pas le cas et que le répertoire du script n'est pas dans le PATH, il faut simplement préciser le chemin complet, comme par exemple:
c:scriptsget-missinglogs.ps1
Si le chemin contient des espaces, il faut l'entourer de guillemets et commencer la commande par un &:
& "c:mes scriptsget-missinglogs.ps1"
On n'est pas obligé de préciser l'extension .ps1 quand on exécute un script, sauf s'il y a un risque de confusion entre plusieurs fichiers exécutables portant le même nom et ne se différenciant que par leur extension (ex: get-missinglogs.cmd, get-missinglogs.vbs et get-missinglogs.ps1).
Pour ce qui est de ta question sur le répertoire à parcourir dans le script, trois cas de figures sont possibles (au moins):
1. S'il s'agit du répertoire en cours, il n'y a rien à changer dans le script.
2. Si tu veux indiquer le répertoire "en dur" dans le script lui-même, tu peux le modifier comme suit:
--- get-missinglogs.ps1 --- $dir = "serveurc$logs" $files = dir $dirk00*.log | sort | foreach {$_.name} ... le reste est inchangé --- fin de script ---
3. Si tu veux indiquer le répertoire en argument du script, tu peux le modifier comme suit:
--- get-missinglogs.ps1 --- param ($dir) $files = dir $dirk00*.log | sort | foreach {$_.name} ... le reste est inchangé --- fin de script ---
Tu peux ensuite appeler le script en lui passant le chemin (complet ou relatif au répertoire en cours):
.get-missinglogs serveurc$logs
Les modifications ci-dessus ne concernent pas l'emplacement du fichier de résultat (missinglogs.log). Celui-ci est écrit dans le répertoire en cours. Si tu veux l'écrire dans le répertoire qui contient les logs, tu peux tout simplement remplacer "$file >> missinglogs.log" par "$file >> $dirmissinglogs.log". A modifier selon ton besoin.
Si tu veux en savoir plus sur PowerShell, je te conseille la lecture de la documentation fournie avec le produit, ou encore les ressources suivantes:
http://janel.spaces.live.com (mon blog, principalement consacré à PowerShell) http://www.powershell-scripting.com (site en français, dédié à PowerShell)
D'autres blogs s'avèrent être des sources d'inspiration importantes, malheureusement en anglais. Tu en trouveras quelques-uns dans la rubrique "Sites" de mon blog ou encore dans la rubrique "Liens" de PowerShell-Scripting.com.
Pour finir, je te signale deux groupes de discussion utiles et très actifs:
news://msnews.microsoft.com/microsoft.public.fr.scripting (en français, pas uniquement sur PowerShell) news://msnews.microsoft.com/microsoft.public.windows.powershell (en anglais, dédié à PowerShell)
Jacques
"big" <big@discussions.microsoft.com> wrote in message
news:4CEB1DD6-6735-42D8-BFDF-06C885ACC752@microsoft.com...
merci Jacques, mais de quelle manier lancer ton script et lui donner le
répertoire de recherche ?
Cdt.
Il faut avoir installé Windows PowerShell sur le serveur (ou l'installer sur
un poste à partir duquel tu peux éventuellement faire un "dir" du serveur).
Tu trouveras les liens vers la doc et l'installation de PowerShell ici:
Attention, il faut avoir le .NET Framework v2 pour pouvoir installer
PowerShell. Les systèmes supportés sont XP SP2, Windows Server 2003 et Vista
(32 ou 64bits pour chaque). PowerShell est maintenant inclus dans Windows
Server 2008.
Une fois PowerShell installé et correctement configuré (je pense notamment à
l'autorisation d'exécution des scripts locaux - voir les messages d'aide
affichés au lancement de ta première session PowerShell), tu peux
sauvegarder le texte dans un fichier portant l'extension .ps1 - par exemple
get-missinglogs.ps1 - et l'exécuter ainsi:
.get-missinglogs.ps1
La syntaxe utilisée ci-dessus suppose que le script est dans le répertoire
en cours. Si ce n'est pas le cas et que le répertoire du script n'est pas
dans le PATH, il faut simplement préciser le chemin complet, comme par
exemple:
c:scriptsget-missinglogs.ps1
Si le chemin contient des espaces, il faut l'entourer de guillemets et
commencer la commande par un &:
& "c:mes scriptsget-missinglogs.ps1"
On n'est pas obligé de préciser l'extension .ps1 quand on exécute un script,
sauf s'il y a un risque de confusion entre plusieurs fichiers exécutables
portant le même nom et ne se différenciant que par leur extension (ex:
get-missinglogs.cmd, get-missinglogs.vbs et get-missinglogs.ps1).
Pour ce qui est de ta question sur le répertoire à parcourir dans le script,
trois cas de figures sont possibles (au moins):
1. S'il s'agit du répertoire en cours, il n'y a rien à changer dans le
script.
2. Si tu veux indiquer le répertoire "en dur" dans le script lui-même, tu
peux le modifier comme suit:
--- get-missinglogs.ps1 ---
$dir = "\serveurc$logs"
$files = dir $dirk00*.log | sort | foreach {$_.name}
... le reste est inchangé
--- fin de script ---
3. Si tu veux indiquer le répertoire en argument du script, tu peux le
modifier comme suit:
--- get-missinglogs.ps1 ---
param ($dir)
$files = dir $dirk00*.log | sort | foreach {$_.name}
... le reste est inchangé
--- fin de script ---
Tu peux ensuite appeler le script en lui passant le chemin (complet ou
relatif au répertoire en cours):
.get-missinglogs \serveurc$logs
Les modifications ci-dessus ne concernent pas l'emplacement du fichier de
résultat (missinglogs.log). Celui-ci est écrit dans le répertoire en cours.
Si tu veux l'écrire dans le répertoire qui contient les logs, tu peux tout
simplement remplacer "$file >> missinglogs.log" par "$file >>
$dirmissinglogs.log". A modifier selon ton besoin.
Si tu veux en savoir plus sur PowerShell, je te conseille la lecture de la
documentation fournie avec le produit, ou encore les ressources suivantes:
http://janel.spaces.live.com (mon blog, principalement consacré à
PowerShell)
http://www.powershell-scripting.com (site en français, dédié à PowerShell)
D'autres blogs s'avèrent être des sources d'inspiration importantes,
malheureusement en anglais. Tu en trouveras quelques-uns dans la rubrique
"Sites" de mon blog ou encore dans la rubrique "Liens" de
PowerShell-Scripting.com.
Pour finir, je te signale deux groupes de discussion utiles et très actifs:
news://msnews.microsoft.com/microsoft.public.fr.scripting (en français, pas
uniquement sur PowerShell)
news://msnews.microsoft.com/microsoft.public.windows.powershell (en anglais,
dédié à PowerShell)
merci Jacques, mais de quelle manier lancer ton script et lui donner le répertoire de recherche ? Cdt.
Il faut avoir installé Windows PowerShell sur le serveur (ou l'installer sur un poste à partir duquel tu peux éventuellement faire un "dir" du serveur). Tu trouveras les liens vers la doc et l'installation de PowerShell ici:
Attention, il faut avoir le .NET Framework v2 pour pouvoir installer PowerShell. Les systèmes supportés sont XP SP2, Windows Server 2003 et Vista (32 ou 64bits pour chaque). PowerShell est maintenant inclus dans Windows Server 2008.
Une fois PowerShell installé et correctement configuré (je pense notamment à l'autorisation d'exécution des scripts locaux - voir les messages d'aide affichés au lancement de ta première session PowerShell), tu peux sauvegarder le texte dans un fichier portant l'extension .ps1 - par exemple get-missinglogs.ps1 - et l'exécuter ainsi:
.get-missinglogs.ps1
La syntaxe utilisée ci-dessus suppose que le script est dans le répertoire en cours. Si ce n'est pas le cas et que le répertoire du script n'est pas dans le PATH, il faut simplement préciser le chemin complet, comme par exemple:
c:scriptsget-missinglogs.ps1
Si le chemin contient des espaces, il faut l'entourer de guillemets et commencer la commande par un &:
& "c:mes scriptsget-missinglogs.ps1"
On n'est pas obligé de préciser l'extension .ps1 quand on exécute un script, sauf s'il y a un risque de confusion entre plusieurs fichiers exécutables portant le même nom et ne se différenciant que par leur extension (ex: get-missinglogs.cmd, get-missinglogs.vbs et get-missinglogs.ps1).
Pour ce qui est de ta question sur le répertoire à parcourir dans le script, trois cas de figures sont possibles (au moins):
1. S'il s'agit du répertoire en cours, il n'y a rien à changer dans le script.
2. Si tu veux indiquer le répertoire "en dur" dans le script lui-même, tu peux le modifier comme suit:
--- get-missinglogs.ps1 --- $dir = "serveurc$logs" $files = dir $dirk00*.log | sort | foreach {$_.name} ... le reste est inchangé --- fin de script ---
3. Si tu veux indiquer le répertoire en argument du script, tu peux le modifier comme suit:
--- get-missinglogs.ps1 --- param ($dir) $files = dir $dirk00*.log | sort | foreach {$_.name} ... le reste est inchangé --- fin de script ---
Tu peux ensuite appeler le script en lui passant le chemin (complet ou relatif au répertoire en cours):
.get-missinglogs serveurc$logs
Les modifications ci-dessus ne concernent pas l'emplacement du fichier de résultat (missinglogs.log). Celui-ci est écrit dans le répertoire en cours. Si tu veux l'écrire dans le répertoire qui contient les logs, tu peux tout simplement remplacer "$file >> missinglogs.log" par "$file >> $dirmissinglogs.log". A modifier selon ton besoin.
Si tu veux en savoir plus sur PowerShell, je te conseille la lecture de la documentation fournie avec le produit, ou encore les ressources suivantes:
http://janel.spaces.live.com (mon blog, principalement consacré à PowerShell) http://www.powershell-scripting.com (site en français, dédié à PowerShell)
D'autres blogs s'avèrent être des sources d'inspiration importantes, malheureusement en anglais. Tu en trouveras quelques-uns dans la rubrique "Sites" de mon blog ou encore dans la rubrique "Liens" de PowerShell-Scripting.com.
Pour finir, je te signale deux groupes de discussion utiles et très actifs:
news://msnews.microsoft.com/microsoft.public.fr.scripting (en français, pas uniquement sur PowerShell) news://msnews.microsoft.com/microsoft.public.windows.powershell (en anglais, dédié à PowerShell)