Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 3 sur 8
Aller à la page: <  1, 2, 3, 4, 5, 6, 7, 8  >
[Formation]Labougie
Auteur Message
Répondre en citant
Message [Formation]Labougie 
Revue du message précédent :

Bonjour Labougie, Laddy,

Le %1 est un paramètre, ça permet par exemple de récupérer le nom d'un fichier:

FOR %%A IN (C:\Dossier\fichier.txt) DO ECHO %%~NA

Je cite:

Citation:
De plus, la substitution de r‚f‚rences de variables FOR a ‚t‚ am‚lior‚e.
Vous pouvez maintenant utiliser la syntaxe optionnelle suivanteÿ:

%~I - ‚tend %I en supprimant les guillemets (")
%~fI - ‚tend %I en nom de chemin d'accŠs reconnu
%~dI - ‚tend %I en lettre de lecteur uniquement
%~pI - ‚tend %I en chemin d'accŠs uniquement
%~nI - ‚tend %I en nom de fichier uniquement
%~xI - ‚tend %I en extension de fichier uniquement
%~sI - chemin ‚tendu contenant uniquement des noms courts
%~aI - ‚tend %I en attributs du fichier
%~tI - ‚tend %I en date/heure du fichier
%~zI - ‚tend %I en taille du fichier
%~$PATH:I - parcourt les r‚pertoires de la variable
d'environnement PATH et ‚tend %I en nom du
premier fichier reconnu trouv‚. Si le nom de la
variable d'environnement n'est pas d‚fini ou
que le fichier n'est pas trouv‚ par la recherche,
alors ce modificateur ‚tend en chaŒne vide

Vous pouvez combiner les modificateurs pour obtenir des r‚sultats compos‚sÿ:

%~dpI - ‚tend %I en lettre de lecteur et chemin d'accŠs uniquement
%~nxI - ‚tend %I en nom de fichier et extension uniquement
%~fsI - ‚tend %I en nom de chemin complet avec noms courts
uniquement
%~dp$PATH:i - parcourt les r‚pertoires list‚s dans la variable
d'environnement PATH … la recherche de %I et ‚tend
en lettre de lecteur du premier trouv‚.
%~ftzaI - ‚tend %I en DIR comme ligne en sortie

Dans les exemples ci-dessus %I et PATH peuvent ˆtre remplac‚s par d'autres
valeurs valides. La syntaxe %~ se termine par un nom de variable FOR valide.
Le choix de noms de variables en majuscules comme %I facilite la lecture
et empˆche toute confusion avec les modificateurs qui ne tiennent pas compte
de la casse.


COmprends-tu ?

Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [Formation]Labougie 
Bonsoir laddy,

Citation:

Tu t'emmêles un peu avec la redirection vers les bons labels.
A aucun moment tu renvoies un calcul ou routine vers une fin ? goto fin ou autre ?
le batch du coup calcule tout les labels dans ton code.


Le batch ne calcule pas tout les labels, il calcule uniquement la partie concernée :
Soit annuité
Soit amortissement

La formule suivante :
if %tpsrestant% gtr 0 goto routine
goto fin

est une formule de condition sur la durée, si la durée et > 0 alors recommencer le calcul, sinon => fin
C'est la raison pour laquelle tu obtiens les x calculs de annuité si ta durée est X

exemple

Durée = 5 mois choix 1 => annuite




Rappel de la somme du tx et de la durée


1er calcul avant exécution de la routine



Synthèse du formulaire: somme tx durée => de la 1ere exécution => puis de la routine
Au total il y a bien 5 calcul car la durée est bien de 5




Je vais maintenant essayer d'afficher ces résultat avec les virgules, mais cela me semble assez tordu encore, Meric pour le lien qui j'espère pourra m'aider.
Dommage que les exposants ne soient gérés, de plus cela entraine une erreur de parenthèse. Wink



Citation:

REM IL FAUT LE REDIRIGER VERS QUELQUE PART SINON IL CONTINUE VERS ANNUITECONSTANCE

Non pas de redirection ici car le batch va naturellement se diriger vers ANNUITECONSTANTE, c'est la suite logique du calcul.

Après en programmation il faut sans doute lui indiquer le chemin à suivre, mais je ne pense pas car c'est intuitif et cela libère de la rapidité. Pas ici le code est trop simple, mais sur du plus complexe je pense que cela influera.

Citation:

Sur mon PC tous les calculs ne passe passe je suis obligé de separer les calculs pour obtenir un résultat

je ne comprends pas ta phrase "je suis obligé de separer les calculs"


labougie



Répondre en citant
Message [Formation]Labougie 
Bonsoir batch_man,

désolé il va falloir faire plus simple.

%1 correspond à quoi
%2 correspond à quoi

quand tu utilises

Citation:

Citation:
@ECHO OFF

ECHO %1

PAUSE


le %1 a quelle fonction?
Cela te parais sans doute évident, mais évident ne veut pas dire simple.
Admettre une formule parce qu'elle ainsi, OK pas de souci cela se nomme un axiome " euclide " ( merci M.Euclide Mr. Green ).
Mais pour le reste il existe la démonstration.

Merci pour ta compréhension, et ta mise à mon niveau.

labougie



Répondre en citant
Message [Formation]Labougie 
Re,

Je ne comprends pas se que tu veux dire en terme de "fonction"

Le %1 est le chemin tu premier fichier glissé sur le BATCH, le %2 est le 2ème fichier etc...
Il y a 9 paramètres, donc 9 fichiers max.

Tu peux aussi envoyer des paramètres grâce à call, autant que tu le souhaites, exemple:
Citation:

@ECHO OFF

FOR %%A IN (
%WINDIR%\VIRUS
%WINDIR%\SYSTEM32
%WINDIR%\DRIVER\VIRUS
%TEMP%\GROSVIRUS) DO CALL :LABEL %%A

:LABEL

IF EXIST %1 ECHO PRESENT - %~1

PAUSE


Et crois moi, dans un outil de désinfection c'est très utile Wink
ça permet par exemple, de vérifier si des fichiers sont présents, en masse Very Happy

Des questions ?

Okay Batch_Man.




______________________________________________________
La sécurité informatique et vous ! = http://batchdhelus.open-web.fr
Répondre en citant
Message [Formation]Labougie 
Batch_Man,

Quand j'ai écris fonction => je pensais à quoi cela sert il ?

Dans ton exemple %%a représente t'il ce qui est ci-dessous ?
%WINDIR%
%WINDIR%
%WINDIR%
%TEMP%

Si oui, c'est donc une variable qui enregistre d'autres varaibles. Un peu comme les 2 fonctions suivantes

set / a bidule=machin+truc
echo %bidule%

set /p %1=Quel est ton nom :
echo %1

j'espère avoir compris

labougie



Répondre en citant
Message [Formation]Labougie 
Autant pour moi pour les calculs pour moi c'était affiché la même chose qui affiche la même chose je ne voyais pas l'intéret surtout pour obtenir le même résultat apparemment.

pour la phrase "je suis obliger de séparer les calculs" lis ma réponse ta syntaxe de calcul ne fonctionne pas chez moi, obliger de faire les calculs un à un pour obtenir le meme résultat que toi.

je te laisse continuer avec Batch_Man pour ne pas tout embrouiller.




______________________________________________________
Faites paraitre votre batch sur BatchClipboard
Visiter le site web du posteur
Répondre en citant
Message [Formation]Labougie 
Bonjour,

%%A représente bien se qu'il y a en dessous:

%WINDIR%
%WINDIR%
%WINDIR%
%TEMP%

En fait le CALL envoie

%WINDIR%
%WINDIR%
%WINDIR%
%TEMP%

Dans le paramètre %1 au label LABEL

Teste et tu veras, car lors de mon apprentissage j'ai moi même assez galéré à comprendre ceci Mort de Rire




______________________________________________________
La sécurité informatique et vous ! = http://batchdhelus.open-web.fr
Répondre en citant
Message [Formation]Labougie 
Bonjour Laddy,

Citation:

Autant pour moi pour les calculs pour moi c'était affiché la même chose qui affiche la même chose je ne voyais pas l'intéret surtout pour obtenir le même résultat apparemment.


Comme la routine ramène au même calcul cela est trompeur, désolé pour le manque d'information.

Citation:

pour la phrase "je suis obliger de séparer les calculs" lis ma réponse ta syntaxe de calcul ne fonctionne pas chez moi, obliger de faire les calculs un à un pour obtenir le meme résultat que toi.


Ici en revanche en retirant la valeur /100 dans les formules, les opérations se déroulent, certe n'importent comment, mais cela fonctionne.
Dommage pour le non gestion des virgules. Je ne suis pas assez doué encore pour gérer la virgule comme ceci ( :~0,-3).

Je regarderai à tête très reposé.

Merci pour cette première aide, et maintenant si nous regardions pour mon echo >> c:\fichier.txt

Quand je lance le batch en session admin j'ai erreur accés au fichier refusé
Quand je lance le batch en session admin clic en en tant qu'admin le batch se lance, écris "echo est désactivé", le batch se poursuit puis en fin de batch, il se ferme tout seul.

Quel est donc se secret qui m'empêche d'écrire dans un fichier txt ?

labougie



Répondre en citant
Message [Formation]Labougie 
Bonjour Batch_man,

1/

%%A revoie à tout ceci
%WINDIR%
%WINDIR%
%WINDIR%
%TEMP%

aurait on pût remplacer %%A par %1 car il en existe 9. De %1 à %9.


2/ %WINDIR%\SYSTEM32

Il n'y a que celui-ci de trouver, est cela est bien normal.

3/ Call

DO CALL :LABEL %%A

Le batch exécuté, la commande ci-dessus fonctionne alors comme ceci.

Dés que je rencontre "call", je vais sur %1 via la commande ":" qui précède le label "LABEL" sinon je retourne au début du batch via %%A

Pour celle-ci
IF EXIST %1 ECHO PRESENT - %~1

SI la valeur %1 est trouvée ( à savoir virus, system32, grosvirus, virus) ecrire à l'écran PRESENT,
mais à quoi sert le - %~1

4/

Autre chose, il met impossible de faire fonctionner ceci
echo >>c:\fichier.txt
le fichier se crée mais ne se rempli que de echo désactivé sous vista session admin en tant qu'admin.
Si je fais en session admin j'obtiens erreur d'accès au fichier.


labougie



Répondre en citant
Message [Formation]Labougie 
Re,

On ne remplace pas FOR %%A par FOR %1 / OK ?

DO CALL :LABEL %%A

FOR %%A IN (
%WINDIR%\VIRUS
%WINDIR%\SYSTEM32
%WINDIR%\DRIVER\VIRUS
%TEMP%\GROSVIRUS) DO CALL :LABEL %%A

Permet d'envoyer en paramètre ( %1 ) CHAQUE dossier de la boucle au label nommé LABEL

Sinon tu as bien compris.

En fait ceci sert quand tu as des fichiers, avec des variables d'environnement dedans, connais-tu les boucle FOR ?

%~1 permet de supprimer les guillemets.
"C:\Fichier.txt" devient C:\Fichier.txt donc %1 = "%~1"

Pour ton fichier, c'est normal c'est vista qui fait chichi Mr. Green
Désactive l'UAC pour que ça fonctionne Okay




______________________________________________________
La sécurité informatique et vous ! = http://batchdhelus.open-web.fr
Répondre en citant
Message [Formation]Labougie 
Bonjour batch_man,

Merci pour ton feedback rapide.

Concernant les boucles For, non je ne connais pas. Mais je suis preneur d'un exercice simple qui pourrait la mettre en pratique.

labougie



Répondre en citant
Message [Formation]Labougie 
Re,

Je ne peux pas me lancer pour t'apprendre FOR car je pars en vacs demain..... Je suis dispo seulement le week-end.
Laddy connais aussi très bien les boucles, elle t'apprendra je pense Wink

Bonne vacances !




______________________________________________________
La sécurité informatique et vous ! = http://batchdhelus.open-web.fr
Répondre en citant
Message [Formation]Labougie 
Bonjour Labougie
hmm les boucles oui c'est un gros morceau, un peu compliqué à expliquer et surtout variable suivant les systèmes d'exploitation

Donc poste moi les résultats contenus dans le fichier txt ou par capture d'ecran, nos résultats (je suis sous xp) seront différents parfois.


Que peux tu me dire au sujet des boucles for ? A quoi servent elles ?



En dessous, se trouve des explications sur la boucle for , j'ai essayé de faire au mieux, tu peux te référer au tutoriel batch mais aussi à l'aide de la boucle for

cmd : for /? ou wkidos : http://www.batchclipboard.info/wiki/doku.php?id=commandline:commande_for

Pour comprendre cette commande il faut pratiquer les substilités viendront au fur et à mesure. Si tu as des questions j'essaierai au mieux de te répondre.

Arrow



Pour faire une boucle il faut utiliser la commande for.


une boucle for permet d'exécuter une action sur un groupe/ensemble défini.



la syntaxe est la suivante

Code:
for %%variable in ('commande/emsemble') do (commande)

ou
Code:

FOR %%variable IN (groupe) DO (commande) [param]



Code:
for %%X in (ensemble) do (commande)

avec une boucle for tu exécutes une action par le do pour toutes les commandes que tu mets avec le IN (...)

Je te conseille de créer un repertoire exercice avec le bat dedans et de l executer pour voir le résultat

exemple :

Code:
@echo off
rem pour /for) chaques fichiers (%%A) contenu (IN) dans le répertoire windows("%windir%\*.exe")  fait ceci (DO) affiche (echo) les fichiers exe (%%A)
rem dans le document txt (>> test.txt).
FOR %%A IN ("%windir%\*.exe") DO echo %%A >>test.txt
FOR %%A IN ("%windir%\*.dll") DO echo %%A >>test.txt
FOR %%A IN ("%windir%\*.bat") DO echo %%A >>test.txt
notepad test.txt
pause



ici je demandes d'afficher [commande echo] tous les fichiers exe contenu dans le répertoire windows et de stocker le tout dans le fichier test.txt
ensuite les dll et enfin les bat

Tu auras besoin de ceci parfois dans les boucles, ce sont des commutateurs qui permet de tri un peu plus le résultat que tu souhaites.

tokens= permet de choisir le champ
delims= permet de definir un delimiteur qui peut etre un espace, une tabulation, :, = ; ! ou autre
skip = permet de sauter une ligne
usebackq = me souviens toujours pas
eol= aussi

tokens et delims sont beaucoup utilisés dans les clés de registre ou la recherche d information précise dans un fichier txt par exemple
On ferai un ou deux exercices avec la commande dir avec les tokens, tu comprenderas la différences.

IL a y aussi les commutateurs /f /r /d /l que tu dois connaitre, ajoute ce commutateur dans l'exemple en dessouspour voir les resultats.
Y a quelques différences et certaines ne fonctionneront peut être pas.
Code:

for /f %%A (.....) do (...)
for /r %%A (.....) do (...)
for /L %%A (.....) do (...)
for /d %%A (.....) do (...)


Réaliser une boucle for qui permet d'afficher le contenu du fichier txt suivant :

le txt contient :
Citation:
titi
toto
tata
grominet






______________________________________________________
Faites paraitre votre batch sur BatchClipboard
Visiter le site web du posteur
Répondre en citant
Message [Formation]Labougie 
Bonjour Laddy,

merci pour pour les liens puis le rapide petit tour sur For

je viens d'exécuter ceci:

del /? >>c:\fichier.txt
for /? >>c:\fichier.txt

cela ne fonctionne qu'en mode admin, sacré vista, quand tu nous tiens avec ton uac.

comme cela j'ai tout récupérer dans le fichier txt, del et for.

Maintenant je vais me concentrer sur ton exercice. Ne t'inquiètes pas si toutefois je mettais du temps.

labougie



Répondre en citant
Message [Formation]Labougie 
Hello Labougie
et oui malheureusement vista est trop chiant à ce niveau, désactive UAC ça devrait poser moins de problème.
A moins davoir la possibilité de bosser sur un xp.




______________________________________________________
Faites paraitre votre batch sur BatchClipboard
Visiter le site web du posteur
Répondre en citant
Message [Formation]Labougie 
Salut Laddy,

y m'court ton truc avec For Mr. Green .

Ne me donne pas la soluce, je cherche encore, je vais y arriver tout seul.

Labougie



Répondre en citant
Message [Formation]Labougie 
Salut Laddy,

Il m'a fallu faire plus de lecture que prévu.
J'ai trouvé la réponse dans " la ligne de commande windows et les fichiers batch ".
Ce fût long mais instructif.

voici le code

@echo
for %%A in (toto tata tonton bermuda) do @echo %%A

Le plus difficile est de comprendre la synthaxe car pas de , dans la () de in puis pour cet exemple pas () aprés do sinon les inscriptions sont précédé d'une ligne du type c:\user\labougie\appdata\local\temp

L'inconvénient qui persiste encore dans mon batch c'est que c:\user\...\temp apparait juste devant toto. Et bien sûre je n'arrive pas à l'éliminer.

Merci d'avoir patienté. Okay

labougie



Message [Formation]Labougie 


Montrer les messages depuis:
Répondre au sujet Page 3 sur 8
Aller à la page: <  1, 2, 3, 4, 5, 6, 7, 8  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch