VBE Execution fichier batch

Triptek Messages postés 17 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 15 septembre 2008 - 27 août 2008 à 14:20
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 - 29 août 2008 à 19:16
Bonjour,

J'aurais besoin de votre aide. Mon formateur ma demandé de faire une macro sous excel pour automatisé l'acquisition de données des disque durs des serveurs pour faire des statistiques.

Le principe est de faire un fichier batch qui fera des net use sur les differents disques et récupéré l'espace libre, tout sa redirigé dans un fichier texte.

Ensuite je lis ce fichier texte (sous VB) j'extrait les infos etc... Pour sa pas de problèmes. Seulement lorsque je lance le fichier bat sous VB avec la fonction :

Shell("mon fichier batch.bat")

Le fichier texte qui est générer est vide! Pourtant lorsque je l'exécute manuellement, aucun problème, les redirections on fonctionnées correctement! Est ce un problème avec VB ou alors avec mon fichiers batch? Ce qui est bizarre c'est qu'en manuel sa marche, mais quand VB l'execute, a marche plus ^^

Voilà mon fichier batch :

net use a: \\serveur\c$
dir a: | find "octets libres" > temp.txt
net use a: /d

net use a: \\serveur\d$
dir a: | find "octets libres" >> temp.txt
net use a: /d

net use a: \\serveur\s$
dir a: | find "octets libres" >> temp.txt
net use a: /d

Merci d'avance !

Ubuntu 8.04
Debian 4.0 Etch
WinWin

Legalize Free Party ^^

14 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
27 août 2008 à 14:29
Tu ne spécifie aucun chemin pour ton fichier temp.txt, il s'enregistre donc dans le répertoire actif.

Regarde dans un des sous-dossier de ton projet si tu n'aurait pas un fichier temp.txt qui traine par hasard.

Probablement dans BIN/Release ou Bin/Debug suivant ta config.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
Triptek Messages postés 17 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 15 septembre 2008
27 août 2008 à 14:39
Le fichier est présent dans le repertoire courant pour sa aucun problème. Seulement, il ne contient rien! De plus le fichier batch est dans le même repertoire que mon fichier excel ^^ Le fichier est générer, mais est vide.

Merci de ton aide

Ubuntu 8.04
Debian 4.0 Etch
WinWin

Legalize Free Party ^^
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
27 août 2008 à 15:03
essaye avec

Try

Dim proc
AsNew System.Diagnostics.Processproc.StartInfo.CreateNoWindow Trueproc.StartInfo.UseShellExecute
Falseproc.StartInfo.RedirectStandardOutput Trueproc.StartInfo.FileName
"commandAsString"proc.StartInfo.Arguments "ArgumentsAsString"proc.StartInfo.StandardOutputEncoding System.Text.Encoding.Unicode

proc.Start()

Dim str
As
String = proc.StandardOutput.ReadToEnd()

My.Computer.FileSystem.WriteAllText(
"PathAndFilenameAsString", str,
False, System.Text.Encoding.Unicode)

Catch ex
As Exception

End
Try

Bonjour chez vous !
0
Triptek Messages postés 17 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 15 septembre 2008
27 août 2008 à 16:07
Je créer une fonction avec sa? J'suis pas expert en VB dsl ^^ Et si tu peux juste me dire ce que sa fait exactement!
Merci

Ubuntu 8.04
Debian 4.0 Etch
WinWin

Legalize Free Party ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Triptek Messages postés 17 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 15 septembre 2008
27 août 2008 à 16:10
En tout ou que ce soit que je le mets, il me dit que le type System.Diagnostics.Process n'est pas définit!

Ubuntu 8.04
Debian 4.0 Etch
WinWin

Legalize Free Party ^^
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
27 août 2008 à 16:13
c'est quoi le vb que tu utilises ??

Bonjour chez vous !
0
Triptek Messages postés 17 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 15 septembre 2008
27 août 2008 à 16:14
Visual Basic sur Excel 2007

Ubuntu 8.04
Debian 4.0 Etch
WinWin

Legalize Free Party ^^
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
27 août 2008 à 16:19
Vous êtes ici : Thèmes / VB.NET et VB 2005 / Système / Exécution / VBE Execution fichier batch
le code que j'ai donné plus haut c'est du vb.net
la prochaine fois poste dans le bon forum qui est


Thèmes/VB6/Languages dérivés /VBA










Bonjour chez vous !
0
Triptek Messages postés 17 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 15 septembre 2008
27 août 2008 à 16:28
Dsl, première fois pour mois que je viens sur le forum, j'ai pas fait gaffe ^^
Je vais reposter alors arghhh

Merci quand même!

Ubuntu 8.04
Debian 4.0 Etch
WinWin

Legalize Free Party ^^
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
27 août 2008 à 16:50
Salut,

non non pas besoin de reposter ! demande(ici) gentillement a un admin de deplacer le sujet vers le theme VBA

tu peux modifier ton batch avec ce qui suit :

set server=\\serveur\c$
net use a: %server%
if %errorlevel%==2 (
call :erreur_sur_net %server%
) else (
dir a: | find "octets libres" >> temp.txt
net use a: /delete /y
)

set server=\\serveur\d$
net use a: %server%
if %errorlevel%==2 (
call :erreur_sur_net %server%
) else (
dir a: | find "octets libres" >> temp.txt
net use a: /delete /y
)

set server=\\serveur\s$
net use a: %server%
if %errorlevel%==2 (
call :erreur_sur_net %server%
) else (
dir a: | find "octets libres" >> temp.txt
net use a: /delete /y
)

pause
goto fin

:erreur_sur_net
echo la commande net use a echouée sur le %1 >> temp.txt

:fin

ce qui serait pas mal ce serait de passer les noms des serveur en parametre pour simplifier le batch

A+
0
Triptek Messages postés 17 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 15 septembre 2008
28 août 2008 à 12:49
Salut,

Je vais tester sa et je te redis si celà marche. En fait, pour les serveurs y'en à que 2, mais je fais des net use sur 3 disques de chaque serveurs. Pour le passage en paramètre si tu pouvais m'expliquer comment sa marche (j'connais myennement dos) et ensuite pour passer les paramètre sous VB on fait comment?

Shell("mon_fichier.bat",paramètre1, paramètre2,...)

Merci de ton aide!

PS :
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
28 août 2008 à 15:28
Salut,

pour les parametres c'etait presque ça :

Shell("mon_fichier.bat paramètre1 paramètre2 paramètre3")

et pour la recuperation ou pourrait faire un truc comme ça :

set parametre=1

:boucle
set server=%parametre
net use a: %server%
if %errorlevel%==2 (
call :erreur_sur_net %server%
) else (
dir a: | find "octets libres" >> temp.txt
net use a: /delete /y
)
set /a parametre=parametre+1
rem si parametre > que 3
if %parametre%
GTR 3 goto next
goto boucle

:next
pause
goto fin

:erreur_sur_net
echo la commande net use a echouée sur le %1 >> temp.txt

:fin

j'ai pas testé mais cela devrait etre un truc comme ça
Pour info un parametre ce recupere comme ça : %1(est le 1ier parametre)   %2(est le 2ieme parametre)  %3etc

A+
0
Triptek Messages postés 17 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 15 septembre 2008
29 août 2008 à 08:27
Salut,

je viens de tester et sa ne fonctionne tjrs pas! Le fichier est créer mais reste vide! Je vois vraiment pas pourquoi le fichier reste vide! Celà dit, je sais maintenant passer des paramètres, c'est tjrs sa de gagné ^^

Merci
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
29 août 2008 à 19:16
Salut,

d'abord ajoute l'option /i a ta commande find pour ingnorer la casse

dir a: | find /i "octets libres" >> temp.txt

si cela ne suffit pas :

pourrais tu essayer de volontairement passer en parametre des mauvais serveurs pour provoquer une erreur sur net use. En faisant cela tu devrais voir 3 lignes d'erreur apparaitre dans ton fichier texte, comme suit :

la commande net use a echouée sur le serveur: serveur1
la commande net use a echouée sur le serveur: serveur2
la commande net use a echouée sur le serveur: serveur3
si ce n'est pas le cas c'est que tu as un probleme de droit d'ecriture sur ton fichier temp.txt
si finallement tu n'as pas ce probleme remplace remet tes parametres d'origine et remplace dans la ligne suivante :

dir a: | find /i "octets libres" >> temp.txt

"octets libres" par  "es" ce qui donne :


dir a: | find /i "es" >> temp.txt

normalement tu devrait trouver dans ton fichier toutes lignes qui contiennent  es
si cela marche copie moi ici le contenu de ton fichier temp.txt

par contre avant d'essayer lit la suite car j'ai fait une connerie dans le code precedent(modif en bleu)

set parametre=1

:boucle
set server=%1
net use a: %server%
if %errorlevel%==2 (
call :erreur_sur_net %server%
) else (
dir a: | find /i "octets libres" >> temp.txt
net use a: /delete /y
)
set /a parametre=parametre+1
rem si parametre > que 3
if %parametre% GTR 3 goto next
rem on se decale sur le parametre suivant
shift
goto boucle

:next
pause
goto fin

:erreur_sur_net
echo la commande net use a echouée sur le serveur: %1 >> temp.txt

:fin

A quoi sert le shift ? et bien ici on a besoin de recupperer les parametres un par un or la methode que j'ai utilisée dans mon code precedent ne marche pas car on ne peut pas boucler sur les parametres.
La commande shift permet de ce decaler sur le parametre suivant c'est a dire que le 1er parametre recupperé par %1 sera suprimé et remplacé par le second. Donc %1 prendra la valeur du second parametre et ainsi de suite.

Voila, plus qu'a essayer

A+
0
Rejoignez-nous