OVH Cloud OVH Cloud

if not existe file then nomfile>> un fichier

13 réponses
Avatar
big
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.

3 réponses

1 2
Avatar
big
merci infiniment Gilles, ça marche.


"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





Avatar
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






Avatar
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:

http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx

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

1 2