Votre question

Problèmes Batch.

Tags :
  • Echo
  • Programmation
Dernière réponse : dans Programmation
31 Juillet 2008 13:04:47

Hello,

Je viens ici poster différents problèmes que j'ai rencontré en batch, et venir vous demander des explications ;) 

Je vais donc vous poster des extraits de batch où ça coince :

1)
  1. for /f "tokens=*" %%A in ('dir "%systemdrive%\" /S /AD /B ^| find /i "BAK"') do if /i '%%~nA'=='BAK' (
  2. dir /b /a-d "%%A" >nul 2>nul
  3. if %errorlevel%==0 (
  4. for /f "tokens=*" %%B in ('dir /B /A-D "%%A"') do (
  5. cd "%%~dpA"
  6. if exist %%B (
  7. echo -^(BAD^)- %%~dpA%%B
  8. echo -^> -^(LEGITIME^)- %%A\%%B
  9. echo.
  10. echo.)))) >> "%desktop%\LZ.log"

Ici, il y a un problème d'errorlevel.
J'ai des fichiers introuvables qui apparaissent en console, il semble y avoir un problème avec l'errorlevel dans les boucles FOR. Un développeur m'a conseillé de traiter la chose à partir d'un fichier texte.

2)
  1. for /f "tokens=1-5 delims=: " %%A in ('systeminfo ^| find /i "totale"') do set mem=%%D %%E > NUL


Et j'obtiens finalement ça : Mémoire vive totale : 2ÿ046 Mo

3)
  1. (echo Contenu du Fichier Hosts: & echo.) >> dir.txt
  2. set /a modif=0 >nul
  3. for /f "eol=# tokens=1-2" %%A in (%windir%\system32\drivers\etc\hosts) do ( if NOT %%A==127.0.0.1 ( echo %%A %%B ^>^> Ligne Modifiée !
  4. set /a modif+=1
  5. ) ELSE (
  6. echo %%A %%B
  7. )
  8. ) >> dir.txt
  9. if '%modif%'=='0' (echo. & echo Aucune ligne Modifiée ;^)
  10. ) ELSE (
  11. (echo. & echo /!\ %modif% lignes modifiée^(s^) ! /!\ ) >> dir.txt
  12. )


Deux problèmes :
- Sur l'ordinateur d'une autre personne, toutes les lignes s'affichent modifiées, pourtant je ne spécifie pas de délimiteurs (or ceux par défaut sont l'espace et la tabulation, donc je ne comprends pas où est le problème).
- J'avais envie que la ligne ::1 dans le fichier Hosts (qui correspond au localhost) ne soit pas mis en ligne modifiée, mais je n'y arrive pas.

4) @echo off & cls
dir /A "*.%1" >> var.log
dir /A "%2" >> var.log
var.log & del var.log
exit

Pour le %2, ça marche pour %windir%, %systemdrive%\, mais étrangement pas pour %programfiles%, une idée ?

5) for %%A in (%windir%\bak\skytel.exe) do (set var=%%^~dpA& set var=%var:bak^\=%& echo %var%)
Or, cela m'affiche %var% .. Mon but est d'obtenir seulement %windir% (j'aurais aimé faire ça sur un groupe de fichiers).
Il semblerait que le problème soit que ce soit un groupe de fichiers qui soit traité dans une boucle for.
Car l'assignation et le fait de transtyper la variable marche autrement (commande dans un boucle for, ou quand on est pas dans une boucle for).

Voilà, merci pour vos réponses !

Autres pages sur : problemes batch

a c 232 L Programmation
2 Août 2008 09:33:00

et eric veut pas t'aider ? :D 
2 Août 2008 10:30:08

Ça va faire trois mois que c'est dans ses MP :lol:  :lol: 

Enfin, il a beaucoup de boulot plus ses deux programmes en batch, donc je le laisse tranquille à part de temps en temps sur la cat :) 

Pour mon dernier problème, on a pas trouvé de soluce.
Contenus similaires
a c 232 L Programmation
2 Août 2008 15:46:19

A mon avis ton 4), ça doit être à cause de l'espace qu'il y a dans "Program Files".

Sinon le reste c'est du batch trop compliqué pour moi :) 
2 Août 2008 18:46:24

Il servira à quoi ce fameux programme ?

A+

:) 
2 Août 2008 20:36:43

Hello,

Ce sont tous des fragments de programme.
Il n'y en a même qui ne sont pas des programmes, mais des essais de commande.
2 Août 2008 21:09:35

Oui j'avais remarqué que les programmes n'étaient pas entiers ;) 

Mais le but du programme final ce sera quoi ?

A+
2 Août 2008 21:53:07

Il n'y a pas de programme final ! :) 
Ils n'ont rien en commun. Ce sont juste des problèmes que j'ai eu avec ces parties là ;) 

@omar,
pourtant je mets des guillemets comme çash : "%programfiles%"
2 Août 2008 21:55:19

Ah okey :) 

Merci ;) 

Vous faites du bon boulot :) 
a b L Programmation
4 Août 2008 15:50:17

1), j'imagine que c'est comme pour les variables. Je pense qu'il faudrait tester l'expansion retardée des variables (et donc remplacer les % en !).
http://www.infos-du-net.com/forum/262255-21-modifier-contenu-fichier-texte

2) que donne ceci:
  1. systeminfo ^| find /i "totale"

ajout un echo de mem après le for pour être spur que le problème vient du for.

3) qu'affichent %%A et %%B ?

4) As-tu testé en enlevant les guillemets dans le script et en les mettant lors de l'appel? (je ne me rappelle plus comment le batch interprète 2 guillemets).

5) Déjà dans le DO, utilise plusieurs lignes plutôt que les & et utilise l'expansion retardée des variables.
4 Août 2008 22:58:38

Hello Cricky :) 

1) Donc !! ou setlocal enableextensions ?

2) Mémoire physique totale: 2 046 Mo
Voilà. Il y a bien un espace (logiqument) entre le 2 et 046.

3) %%A affiche l'adresse IP et %%B le domaine correspondant.
Ex : 127.0.0.1(%%A) localhost (%%B)

4) ça ne change rien, c'est un mystère ..

5) Il me semble avoir déjà essayé les deux options que tu m'as indiqué, sans succès.
je viens de ressayer ça ne marche pas :
@echo off & cls
setlocal enableextensions
for %%A in (%windir%\bak\skytel.exe) do (
set var=%%^~dpA
set var=%var:bak^\=%
echo %var%)
pause

Truc bizarre... La raison du pourquoi j'ai regroupé les instructions avec le & est qu'ici, le message qui apparaît est "commande echo désactivée", comme si le %var% derrière n'était pas présent.

Merci ;) 
[Je pars en vacances, serai de retour dans ~2 semaines]
a b L Programmation
5 Août 2008 00:10:22

1) je ne crois pas que ça fasse partie des extensions (peut-être), on peut activer l'expansion en modifiant une clé dans la base de registre ou lancer cmd avec le commutateur qui va bien. Bref, dans tous les cas, une fois activée, il faut l'utiliser cette expansion avec !var!

2) Et l'affichage de mem donne quoi ? Si c'est pareil, fait un echo %%D %%E
Tu as peut-être aussi un problème d'expansion retardé. Ce qui est bizarre c'est que le caractère espace 0x20 semble se transformer en 0xFF.

3) Essaie en ajoutant des guillemets dans le if:
if NOT "%%A"=="127.0.0.1"
Je les mets toujours, mais je ne sais plus si c'est obligatoire.

4) Enlève le @echo off et montre tout :) 

5) comme tu sépares les commandes, il te faut utilise l'expansion retardée !var!. Dans ta boucle VAR est toujours vide car var est effectivement modifié après le for. Donc tu fais un "echo" vide qui affiche donc ce message.
5 Août 2008 00:45:00

Hello,

1) Pour setlocal si ;) 

ENABLEEXTENSIONS / DISABLEEXTENSIONS
active ou désactive les extensions de commandes. Entrez
CMD /? pour plus de détails.
Je testerai quand je serai de retour :) 

2) L'affichage de mem c'est ça : 2ÿ046 Mo
Tu penses que je devrais essayer avec un set local et les ! ? J'essaierai donc de retour ;) 

3)
Citation :
if NOT "%%A"=="127.0.0.1"

Déjà fait, mais je peux toujours ressayer (avec la personne concernée par le "beug").
Normalement, on doit pouvoir mettre ou bien rien ou bien des ' ou bien des " autour des variables ?..?

4) Sans guillemets à programfiles en argument ( mais il y en a déjà autour de la variable dans le bat!)
C:\Users\Antoine\Desktop>dir /A "*.exe" 1>>var.log

C:\Users\Antoine\Desktop>dir /A "C:\Program" 1>>var.log
Fichier introuvable

C:\Users\Antoine\Desktop>var.log & del var.log

avec guillemets :

C:\Users\Antoine\Desktop>dir /A ""C:\Program Files\"" 1>>var.log
Le fichier spécifié est introuvable.


Maintenant des guillemets en trop :lol: 

5)
Citation :
Donc tu fais un "echo" vide qui affiche donc ce message.

logiquement, même si la variable est nule, ça devrait afficher %var% et non pas rien comme si je demandais l'état de la commande, non ?
Euh je remplace quels %% , tous ?
For !!A ?
ça ne marche pas.
Sinon si je remplace les % que dans la boucle, !var! apparaît à l'écran.



a b L Programmation
5 Août 2008 12:00:10

1) ça ne dit toujours pas que que l'expansion retardée fait partie des extensions ;) 

2) ou tester en mettant toi-même les delims

3) Le problème avec le batch, c'est que ça a évolué avec les OS :) 

4) Teste ce que j'avais dis: pas de guillemet dans le batch, et des guillemets à l'appel

5)
Citation :

logiquement, même si la variable est nule, ça devrait afficher %var% et non pas rien comme si je demandais l'état de la commande, non ?

les variables en batch c'est comme les #define en C, ce n'est que tu remplacement de textedonc si la variable est vide ta commande devient "echo " ce qui affiche le message.

Citation :
Euh je remplace quels %% , tous ?
For !!A ?

Dans les boucles FOR, ce ne sont pas vraiment des variables d'environnements (d'ailleurs on n'utilise pas %A% mais bien %A ou %%A dans un script).
Donc, le FOR garde son %%A, c'est juste pour les variables d'environnement (avec un SET) où il faut mettre !var!

25 Août 2008 22:34:48

Hello :) 

1) En faisant comme ça :

setlocal enableextensions

for /f "tokens=*" %%A in ('dir "%systemdrive%\" /S /AD /B ^| find /i "BAK"') do if /i '%%~nA'=='BAK' (
dir /b /a-d "%%A" >nul 2>nul
if !errorlevel!==0 (
for /f "tokens=*" %%B in ('dir /B /A-D "%%A"') do (
cd "%%~dpA"
if exist %%B (
echo -^(BAD^)- %%~dpA%%B
echo -^> -^(LEGITIME^)- %%A\%%B
echo.
echo.
)))) >> "%desktop%\LZ.log"
endlocal

Plus de message d'erreur apparemment, mais la recherche ne se fait pas correctement. Les fichiers trouvés ne s'affichent plus :p 

2) Que veux-tu dire ? Il y a déjà delims spécifié dans ma boucle.

3) :D 

4) Bravo, ça marche :) 
Curieux quand on y réfléchit.
En mettant des guillemets dans le batch et pas de guillemets pour %programfiles% à l'appel, ça ne marche pas, alors que l'inverse marche. Sans compter le fait que le problème ne se pose qu'avec cette variable.

5) Bah pourtant si je fais :

set var=
echo %var%

C'est %var% qui s'affichera. Je n'ai pas du bien comprendre :p 

Sinon ça me met !var! :s :p 

merci!
a b L Programmation
26 Août 2008 20:21:48

1) quelle est la partie qui coince?

2) Il te manque peut-être des caractères de délimitation ;) 

4) quand tu ne mets pas de guillemet au lancement, l'interpréteur y voit un second paramètre (ce qui est logique), donc avant le lancement du .bat, le répertoire est déjà découpé par l'interpréteur "appelant", tu ne faisais que mettre des variable autour du paramètre découpé.

5) c'est parce que tu n'as pas activé l'expansion retardé (qui est différent de enableextension).
Dans un for, une variable d'environnement (j'exclus évidemment les %%A, %%B, etc) n'est effectivement modifié que lorsque la ligne de commande (donc le for) est terminé. Donc ça t'affiche la variable, mais si tu la modifie dans la boucle, alors pendant toute la boucle elle aura la même valeur, et seulement une fois la boucle terminée, elle aura la valeur finale.
28 Août 2008 16:05:46

Hello,

1) Je ne sais pas trop, j'ai fait une capture d'écran pour te montrer.
Je précise que j'ai un fichier C:\Windows\Skytel et j'ai mis un fake dans C:\Windows\BAK pour le programme, donc normalement, ils doivent apparaître (et apparaissaient) dans le rapport final ce qui en se produit pas.

On dirait que ça coince sur la variable %%B ?



En plus de ça, il y a les problèmes d'accès aux dossiers de jonctions de Vista, ce qui met la pagaille :p 

2) Penses-tu à la tabulation ?
Je suis déçu, j'ai fait ce test en console :
for /f "tokens=1-3*" %A in ('systeminfo ^| find /i "totale"') do echo %D

Il s'affiche bien 2 046 mo

Je refais dans mon batch :
for /f "tokens=1-3*" %%A in ('systeminfo ^| find /i "totale"') do set mem=%%D > NUL
Et même résultat qu'avant :p 

4) Un peu de mal à comprendre, mais je vois bien que ce n'est pas simple à expliquer ;) 

5) Ok :) 
a b L Programmation
28 Août 2008 20:04:43

1) ajoute des echo un peu partout pour voir si ça fait bien les for et if

2) Redirige dans un fichier et regarde en hexa ce qu'il y a entre 2 et le 0
28 Août 2008 22:09:49

1 )

Tu veux dire : Mettre des echo quelque chose à chaque ligne quasiment ?

2) En hexa je fais comment ? :D 

Merci ;) 

a b L Programmation
28 Août 2008 23:12:30

1) oui

2) notepad++ avec le plugin HEX-editor ;) 
29 Août 2008 12:40:47

Yop,

Pour le plugin, j'ai téléchargé la dll zippée sur sourceforge.net, j'ai mis la dll dézippée dans le dossier plugin de notepad ++. Mais apparemment le plugin n'est pas compatible.

J'ai vu qu'il y avait un logiciel Hex Editor , j'utilise celui-là ? ;) 

Pour le un, je posterai avec ma prochaine réponse .
a b L Programmation
29 Août 2008 19:40:09

Pourquoi pas compatible? tu n'as pas le petit bouton "H" vers la fin ? ni Plugins>HEX-Editor>View in Hex
29 Août 2008 20:51:35

Hello,

Voici une image (ma version de Notepad ++ est normalement à jour, la mise à jour automatique étant activée).

29 Août 2008 23:16:47

Yop,

"2" parties ?
Je ne suis pas sûr de comprendre.
Je me suis rendu en bas de la balle pour les plugins et celui-là en particulier qui m'a mené sur cette page :
http://sourceforge.net/project/showfiles.php?group_id=1...

Ou le fichier à télécharger est finalement le même que celui téléchargé.
Ou bien dois-je prendre le patch ? (seulement ou en plus)

Merci
a c 232 L Programmation
30 Août 2008 09:41:51

A mon avis, les 2 parties = Notepad++ et le plugin ;-)
30 Août 2008 12:53:36

Ah cette fois, ça marche :) 

J'ai ça :

0d 0a 32 ff 30 34 36 20 4d 6f 0d 0a

Si tu veux plus de précisions, je peux faire un screen ^^
a b L Programmation
30 Août 2008 15:01:31

C'est bien ce que je pensais, tu n'a pas d'espace (0x20) entre le 2 (0x32) et le 4 (0x34), mais un 0xFF.
Essaie en copie ce caractère pour l'ajouter en delims dans le FOR, c'est pas sûr que ça marche comme c'est un caractère spécial.
En fait, je pense que ça a été fait exprès pour que lorsqu'on découpe par espace on puisse prendre tout le nombre parce qu'on ne sait pas combien d'espace il y a dans le nombre. Donc si le for avec le caractère 0xFF fonctionne il faudra faire une seconde boucle for pour éliminer ce caractère.

30 Août 2008 15:38:49

Citation :
En fait, je pense que ça a été fait exprès pour que lorsqu'on découpe par espace on puisse prendre tout le nombre parce qu'on ne sait pas combien d'espace il y a dans le nombre

Malin en effet, je ne serais pas arrivé à cette conclusion.

Mais bon il suffit de faire ça en tokens=unnombre-l'autre* et le problème est réglé normalement pour voir tout le nombre.

Par contre désolé, mais j'ai du mal à suivre pour l'opération que je dois faire dans mon for ;) 
Tu veux dire copier le caractère spécial et le mettre en delims c'est bien ça ?
a b L Programmation
30 Août 2008 16:27:48

En fait pas besoin d'imbriquer, une fois que tu as fais ta variable, tu peux faire un for /F sur la commande 'echo %tavariable%' que tu peux donc découper (non testé).
30 Août 2008 19:16:48

Mais vu que le délimiteur est un caractère apparemment mal interprété, le problème est le même, il faut que j'arrive à le mettre dans delims, non ?
a b L Programmation
30 Août 2008 20:18:35

Oui, et si tu ne peux pas, je ne vois pas comment faire ça simplement.
1 Septembre 2008 12:03:37

Hello,

Mémoire vive totale : 2ÿ046 Mo

Toujours ça :D 

Avec ceci dans le batch :

for /f "tokens=1-3* delims=ÿ " %%A in ('systeminfo ^| find /i "totale"') do set mem=%%D > NUL

Le truc c'est qu'en console, ce caractère n'apparaît pas, où bien il est mal interprété et interprété comme un espace.

-----------

Pour l'autre en changeant la partie comme ça :

setlocal enableextensions

for /f "tokens=*" %%A in ('dir "%systemdrive%\" /S /AD /B ^| find /i "BAK"') do if /i '%%~nA'=='BAK' (
dir /b /a-d "%%A" >nul 2>nul
echo youpi
if !errorlevel!==0 (
echo Youpi2
for /f "tokens=*" %%B in ('dir /B /A-D "%%A"') do (
cd "%%~dpA"
echo yOUpi3
if exist %%B (
echo Youpi4
echo -^(BAD^)- %%~dpA%%B
echo -^> -^(LEGITIME^)- %%A\%%B
echo.
echo.
)))) >> "%desktop%\LZ.log"
endlocal

J'obtiens dans le log final :

youpi
youpi
youpi

(jai trois dossiers bak)

Donc ça coince à nouveau au niveau de l'errorlevel, avant ça l'exécutait tout le temps, et là ça n'exécute rien, enfin je crois.
a b L Programmation
1 Septembre 2008 20:14:48

On en revient au même problème: as-tu activé l'expansion retardée des variables d'environnement ?
2 Septembre 2008 10:23:49

Je n'avais pas mi le bon truc, en effet, c'est setlocal enableDelayedExpansion.

Le résultat est :

ça marche impeccable :) 
Donc, moral de l'histoire, activer l'expansion retardée, si on met des conditions dans des boucles ou des conditions , c'est ça ?
Je vais essayer voir si ça le fait pour mon fichier Hosts :) 

Merci. Te tiens a ucourant.
a b L Programmation
2 Septembre 2008 20:14:51

oui cette option est pour utiliser le !var! au lieu de %var% dans les boucles et variables
3 Septembre 2008 18:29:03

Hello :) 

Le problème est résolu pour le 5 grâce à l'expansion retardée. :)  !

pour le 3), tu penses que ça peut se régler avec l'expansion retardée ?
Je n'ai pas réussi, mais je n'avais que des variables de type for ..

a b L Programmation
3 Septembre 2008 19:44:48

Je ne pense pas que ça règle le 3)
4 Septembre 2008 07:13:00

Ok :) 

Donc on peut le considérer comme insoluble :p 
26 Septembre 2008 19:19:23

Hello,

Can you help me for an other thing ?

J'avais un exercice sur un forum où je devais trouver une technique pour quelque chose à faire, j'ai choisi le batch : je me sers de ça

for /F %%A in ('dir /B /AD "%userprofile%"') do ( echo %%A ) >> youpi.log

Enfin c'était pas la même chose , mais vu que ça ne marchait pas, j'ai mis seulement un echo %%A.
Mais je n'arrive pas à obtenir le nom entier des dossiers, à partir du moment où ils comprennent des espaces.
Note: j'ai essayé "%%A", mais ça ne marche pas mieux, can you help me plz ?


Le truc que je comprends pas, c'est qu'une fois, j'avais fait un batch similaire pour un personne et les noms des dossiers s'affichaient correctement voir ce sujet :
http://www.infos-du-net.com/forum/280898-11-plusieurs-i...

Dans le sujet, tu verras que les noms d'utilisateurs s'affichent bien.

Je vois peut être pas une différence qui est grosse comme une maison ... ?
a b L Programmation
26 Septembre 2008 20:36:42

En fait dans le for /F, l'espace et la tabulation sont les séparateurs par défaut, donc si tu as 2 espaces, tout va être séparer dans %%A, %%B et %%C.
Bref, je vois 2 possibilités:
- soit tu redéfinis les délimitateur, et tu n'en mets aucun: FOR /F "delims=" %%A ...
- soit tu gardes le délimitateur par défaut, et tu indiques ton propre découpage de morceaux, en disant que tu veux tout le reste (avec *) dès le début: FOR /F "tokens=*" %%A ...

Dans ton autre exemple, tu as la seconde solution. Personnellement, je préfère plutôt le première. ;) 
26 Septembre 2008 22:36:36

Citation :
En fait dans le for /F, l'espace et la tabulation sont les séparateurs par défaut, donc si tu as 2 espaces, tout va être séparer dans %%A, %%B et %%C.

Ah mais oui! Qu'est-ce qui m'arrive, j'avais complètement zappé ça. Merci !

En fait, quand j'ai posté dans ce sujet, j'ai du oublier le "tokens=*" , car dans mon exercice, je l'ai bien mis, mais le batch ne marche tout de même pas correctement.

Je t'explique vite fait la chose (c'est pas un exercice en fait) :

Dans %userprofile%, un virus cherche les sous dossiers, et se copie dans chaque sous dossier sous cette forme : [nomdudossier].exe

Donc j'ai fait ça :

  1. @echo off & cls
  2. cd %userprofile%\my documents
  3. set malware=0
  4. for /F "tokens=*" %%A in ('dir /AD /B') do ( if exist "%%A\[%%A].exe" (
  5. set malware+=1
  6. taskkill /F /IM "%%A.exe"
  7. del /A /F /Q "%%A\[%%A].exe"
  8. if exist "%%A\[%%A].exe" (
  9. echo Unable to delete [%%A].exe !
  10. ) else ( echo [%%A].exe deleted successfully !
  11. ))) >> Kill.log
  12. if %malware%==0 (echo No Treath Detected !) >> Kill.log


Or, cela ne marche pas.

Réponse :

Citation :
Something went wrong on my testcomputer

I created this file:

C:\Documents and Settings\Administrator\My Documents\tun235\tun235.exe

But kill.log says:
No Treath Detected !
No Treath Detected !
No Treath Detected !


Comprends-tu pourquoi ?


Je remarque le même type d'erreur sur le mien, en faisant ceci :

  1. @echo off & cls
  2. cd %userprofile%
  3. for /F "tokens=*" %%A in ('dir /B /AD "%userprofile%\"') do ( cd "%%A"
  4. echo %CD%
  5. cd.. ) >> youpi.log
  6. youpi.log & del youpi.log
  7. exit


J'obtiens :

Citation :
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine
C:\Users\Antoine

Je me demande si les jonctions de vista ne pourraient pas poser problème, mais de toute façon, ça ne se limite pas à ça, j'ai du faire une erreur ? mais laquelle .. je ne trouve pas

En tout cas, merci beaucoup ! J'espère que c'est pas un truc bête, sinon ça veut dire que j'ai complètement régressé.
a b L Programmation
26 Septembre 2008 23:58:05

Je pense que ton répertoire courant est bien changé, et que c'est juste un problème d'affichage de %CD% comme la variable d'environnement est modifiée dans la boucle, elle n'est effectivement modifiée qu'une fois la boucle terminée.
C'est encore un problème d'expansion retardée, donc active-le et utilise echo !CD!
27 Septembre 2008 11:40:42

Hello,

Effectivement, c'est bien ça :) 

Je me demande pourquoi je n'y ai pas pensé, toujours utiliser l'expansion retardée dans une boucle, si on utilise une variable.

En ce qui concerne l'autre, as-tu une idée ?

Sinon je vais essayer de détourner le truc comme ceci :

  1. @echo off & cls
  2. cd %userprofile%\my documents
  3. set malware=0
  4. for /F "tokens=*" %%A in ('dir /AD /B') do ( cd "%%A"
  5. if exist "%%A.exe" (
  6. set malware+=1
  7. taskkill /F /IM "%%A.exe"
  8. del /A /F /Q "%%A.exe"
  9. if exist "%%A.exe" (
  10. echo Unable to delete %%A.exe !
  11. ) else ( echo %%A.exe deleted successfully !
  12. ))
  13. cd..) >> Kill.log
  14. if %malware%==0 (echo No Treath Detected !) >> Kill.log


?

Merci ! Mais bon, logiquement, il devrait marcher celui d'avant.
Je vais lui demander de changer le batch parce que j'avais mis des crochets autour du %%A alors qu'y en a pas .
a b L Programmation
27 Septembre 2008 11:59:54

Oui essaie le nouveau, et pour l'autre ajoute des traces pour savoir ce qui se passe vraiment :) 
27 Septembre 2008 12:01:48

Oki, merci !

Je lui ai demandé de refaire sans les crochets. Si ça ne marche toujours pas, je mettrai des echo un peu de partout pour voir ce que ça donne.

Merci, je te tiens au courant ;) 

D'ailleurs, un peu plus tard peut-être, est-ce que tu es accessible pour des questions sur l'hexadécimal ? (Entre autre dans le registre)
a b L Programmation
27 Septembre 2008 12:12:53

Pose toujours la question, quelqu'un d'autre peut aussi te répondre ;) 
27 Septembre 2008 12:28:14

Oki, ce sera un peu plus tard.

Alors pour le batch (sans les []), je l'ai essayé sur mon XP.

J'ai mis dans le dossier Bureau, Bureau;exe, et pareil pour d'autres dossiers.

Résultat, le batch n'ouvre pas de log.
Seulement le fichier qui est trouvé dans le premier dossier est supprimé et le programme ferme.

Il doit y avoir un problème .. Je vais essayer de voir si je peux le faire apparaître ;) 

edit: Je n'arrive à rien avoir de concluant (j'ai enlevé echo off & mis une pause après l'arrêt du processus et la suppression) :

Citation :

C:\Documents and Settings\Toinou\Bureau>cd C:\Documents and Settings\Toinou\

C:\Documents and Settings\Toinou>set malware=0

C:\Documents and Settings\Toinou>for /F "tokens=*" %A in ('dir /AD /B') do (if e
xist "%A\%A.exe" (
set malware+=1
taskkill /F /IM "%A.exe" 1>nul
pause
del /A /F /Q "%A\%A.exe"
pause
if exist "%A\%A.exe" (echo Unable to delete %A.exe ! ) else (echo %A.exe delet
ed successfully ! )
) ) 1>>Kill.log

C:\Documents and Settings\Toinou>(if exist ".limewire\.limewire.exe" (
set malware+=1
taskkill /F /IM ".limewire.exe" 1>nul
pause
del /A /F /Q ".limewire\.limewire.exe"
pause
if exist ".limewire\.limewire.exe" (echo Unable to delete .limewire.exe ! ) el
se (echo .limewire.exe deleted successfully ! )
) ) 1>>Kill.log

C:\Documents and Settings\Toinou>(if exist ".VirtualBox\.VirtualBox.exe" (
set malware+=1
taskkill /F /IM ".VirtualBox.exe" 1>nul
pause
del /A /F /Q ".VirtualBox\.VirtualBox.exe"
pause
if exist ".VirtualBox\.VirtualBox.exe" (echo Unable to delete .VirtualBox.exe !
) else (echo .VirtualBox.exe deleted successfully ! )
) ) 1>>Kill.log

C:\Documents and Settings\Toinou>(if exist "Application Data\Application Data.ex
e" (
set malware+=1
taskkill /F /IM "Application Data.exe" 1>nul
pause
del /A /F /Q "Application Data\Application Data.exe"
pause
if exist "Application Data\Application Data.exe" (echo Unable to delete Applica
tion Data.exe ! ) else (echo Application Data.exe deleted successfully ! )
) ) 1>>Kill.log

C:\Documents and Settings\Toinou>(if exist "Bootvis\Bootvis.exe" (
set malware+=1
taskkill /F /IM "Bootvis.exe" 1>nul
pause
del /A /F /Q "Bootvis\Bootvis.exe"
pause
if exist "Bootvis\Bootvis.exe" (echo Unable to delete Bootvis.exe ! ) else (ec
ho Bootvis.exe deleted successfully ! )
) ) 1>>Kill.log

C:\Documents and Settings\Toinou>(if exist "Bureau\Bureau.exe" (
set malware+=1
taskkill /F /IM "Bureau.exe" 1>nul
pause
del /A /F /Q "Bureau\Bureau.exe"
pause
if exist "Bureau\Bureau.exe" (echo Unable to delete Bureau.exe ! ) else (echo
Bureau.exe deleted successfully ! )
) ) 1>>Kill.log
Erreur : le processus "Bureau.exe" est introuvable.

Donc là, j'ai copié pendant la pause.
Bon le processus est pas lancé, donc c'est normal, je rappuie sur une touche, ça supprime Bureau.exe, je rappuie, du texte défile très vite, et ça se coupe, je n'ai le temps de rien faire, je vais essayer d'ajouter une pause, mais je ne pense pas que ça va marcher .. ça ne marche pas ^^

J'ai regardé le log :

ça donne ça

Citation :
Appuyez sur une touche pour continuer ...
Appuyez sur une touche pour continuer ...
Appuyez sur une touche pour continuer ...
Bureau.exe deleted successfully !
No Treath Detected !


Alors là, je vois pas ce qui marche, je pensais au else. Mais la suite s'exécute, et la variable malware n'est pas bien modifiée..
a b L Programmation
27 Septembre 2008 12:45:32

Je pense que à la prochaine boucle ça ne rentre jamais dans le if exist

ne redirige pas tout dans kill.log, garde le echo off, et ajoute un echo !CD! avant ce le if exist
    • 1 / 8
    • 2
    • 3
    • 4
    • 5
    • Plus de pages
    • Suivant
    • Dernier
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS