Bat dos variable dans find ne marche pas help
Résolu
librequetucrois
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous ; un peu d'aide s'il vous plait ; ça m'énerve de trainer sur un truc qui doit avoir une solution relativement simple quand on sait faire.
.
ce code par moi-même fonctionne mais ça ne fait pas ce que je souhaite
.
.
je voudrais mettre une variable mais find crois que %varhelpsearch% est un fichier
.
.
et je voudrais que more ou équivalent affiche les lignes entres deux lignes trouvées par find (dans fichier 0% = lui-même !!!) au lieu d'avoir les lignes qui contiennent ou qui commencent par la chaîne recherchée (ou comment supprimer une partie sur la ligne avant affichage) + comment rajouter un entête : 2 recherches pour afficher la ligne de titre en haut echo *** HELP (%varlang%) *** et intégré dans more pour que ce soit affiché en haut (et pas caché en haut = sans avoir à scroller).
.
goto finaide
rem help (fr-fr)
HLP(fr-fr): cet outil à pour but de ... (001)
HLP(fr-fr): cet outil à pour but de ...
(...)
rem help (en-us)
HLP(en-us): cet outil à pour but de ... (001)
HLP(en-us): cet outil à pour but de ...
HLP(en-us): cet outil à pour but de ...
.
merci, comment faire ? < config >Windows 7 / Firefox 3.6.26< / config >
.
ce code par moi-même fonctionne mais ça ne fait pas ce que je souhaite
.
set varhelpsearch=HLP(%varlang%): rem echo %varhelpsearch% find "HLP(fr-fr):" %0 | more /E +3
.
je voudrais mettre une variable mais find crois que %varhelpsearch% est un fichier
.
set varhelpsearch=HLP(%varlang%): rem echo %varhelpsearch% find %varhelpsearch% %0 | more /E +3
.
et je voudrais que more ou équivalent affiche les lignes entres deux lignes trouvées par find (dans fichier 0% = lui-même !!!) au lieu d'avoir les lignes qui contiennent ou qui commencent par la chaîne recherchée (ou comment supprimer une partie sur la ligne avant affichage) + comment rajouter un entête : 2 recherches pour afficher la ligne de titre en haut echo *** HELP (%varlang%) *** et intégré dans more pour que ce soit affiché en haut (et pas caché en haut = sans avoir à scroller).
.
goto finaide
rem help (fr-fr)
HLP(fr-fr): cet outil à pour but de ... (001)
HLP(fr-fr): cet outil à pour but de ...
(...)
rem help (en-us)
HLP(en-us): cet outil à pour but de ... (001)
HLP(en-us): cet outil à pour but de ...
HLP(en-us): cet outil à pour but de ...
.
merci, comment faire ? < config >Windows 7 / Firefox 3.6.26< / config >
A voir également:
- Bat dos variable dans find ne marche pas help
- Fichier bat - Guide
- Bat to exe converter - Télécharger - Édition & Programmation
- Find and mount - Télécharger - Récupération de données
- Ava find - Télécharger - Divers Utilitaires
- Fonction ms dos non valide - Forum Windows 8 / 8.1
5 réponses
slt ; merci beaucoup pour l'information qui m'a indirectement aidée :
J'ai bien essayé avec les guillemets et j'ai même essayé un mixte au départ :
Sans succès ...
find "HLP(%varlang%):" %0 | more /E +3
ou
find "HLP("%varlang%"):" %0 | more /E +3
ou
find "HLP("^%varlang^%):" %0 | more /E +3
^ pour échapper des caractères (mais un peu au pif ; car c'est pas évident)
à moins que ; mais comment faire ; s'il vous plait et merci :
Variable "for" avec les extensions de commandes donc "!!" au lieu "%%" ?
J'arrive à faire des trucs mais pas toujours, il me faut des codes exemples.
Je suis arrivé à faire cela (le point virgule après set ne sert à rien je crois) :
Astuce convertir DEC to HEX & danseur '.bat' | CommentCaMarche :
http://www.commentcamarche.net/forum/affich-24364049-astuce-convertir-dec-to-hex-danseur-bat
-----
Au dessus sans édition avant de tester et là avec test ; ok à la fin :
=
45444
fr
frfr= fr
frfr= fr-fr
Appuyez sur une touche pour continuer...
Pourquoi echo ne fonctionne pas ou est-ce une astuce que j'ai visualisé ?
2 echo identiques n'affichent pas la même chose ; c'est pas find qui bug :
Cela fonctionne (sauf l'entête+coupe) si la variable %varlang% = fr-fr ...
C'est où le bug avec echo (le signe = ; non) ? merci
Quand je supprime les lignes de tests ça marche plus.
cela fonctionne avec ce qu'il y a au dessus pour find qui marche :
pfff ; j'avais même oublié %% dans les if mais ça change rien au bug de echo et comment afficher un nombre de ligne à partir d'une variable pour more ou au moins un nombre fixe écran par écran ; est-ce que l'on peut rediriger les commandes avancées ? mais comment afficher un entête et les lignes d'aides expurgées des caractères "HLP(fr-fr): ".
(( code complet actuel pour "test.bat" ; 11,2 Ko (11 511 octets)
CRC32: 79966942
MD5: 0BD61816CBE694238C91BED2F8356EFF
SHA-1: BED63AC5B1AA5D638E479E14243B9CE9545FC51E
SHA-256: 34BB55491FFC3538442783F3E08CAB2CCDA6A688CBE8524D42A175DBDD1D1A71 ))
Édit 21h33:
Merci s'il vous plaît de m'aider pour le reste pour le même endroit.
Je mets résolu car c'est résolu (mais il y a d'autres questions ci-dessus).
J'ai bien essayé avec les guillemets et j'ai même essayé un mixte au départ :
Sans succès ...
find "HLP(%varlang%):" %0 | more /E +3
ou
find "HLP("%varlang%"):" %0 | more /E +3
ou
find "HLP("^%varlang^%):" %0 | more /E +3
^ pour échapper des caractères (mais un peu au pif ; car c'est pas évident)
à moins que ; mais comment faire ; s'il vous plait et merci :
Variable "for" avec les extensions de commandes donc "!!" au lieu "%%" ?
J'arrive à faire des trucs mais pas toujours, il me faut des codes exemples.
Je suis arrivé à faire cela (le point virgule après set ne sert à rien je crois) :
Astuce convertir DEC to HEX & danseur '.bat' | CommentCaMarche :
http://www.commentcamarche.net/forum/affich-24364049-astuce-convertir-dec-to-hex-danseur-bat
-----
Au dessus sans édition avant de tester et là avec test ; ok à la fin :
IF DEFINED locale set varlang=%locale% IF "%locale%"=="fr" ( set varlang=fr-fr echo 45444 echo %varlang% echo frfr= %varlang% goto tst ) exit :tst echo frfr= %varlang% pause
=
45444
fr
frfr= fr
frfr= fr-fr
Appuyez sur une touche pour continuer...
Pourquoi echo ne fonctionne pas ou est-ce une astuce que j'ai visualisé ?
2 echo identiques n'affichent pas la même chose ; c'est pas find qui bug :
Cela fonctionne (sauf l'entête+coupe) si la variable %varlang% = fr-fr ...
: :help : echo. echo *** HELP (%varlang%) *** echo. : set varhelpsearch=HLP(%varlang%): find "%varhelpsearch%" %0 | more /E +3 : goto finaide : rem help (fr-fr) : HLP(fr-fr): cet outil à pour but de ... (001) HLP(fr-fr): cet outil à pour but de ...
C'est où le bug avec echo (le signe = ; non) ? merci
Quand je supprime les lignes de tests ça marche plus.
cela fonctionne avec ce qu'il y a au dessus pour find qui marche :
IF DEFINED locale set varlang=%locale% : IF "%varlang%"=="fr" ( set varlang=fr-fr goto debutscript ) IF "%varlang%"=="en" ( set varlang=en-us goto debutscript ) IF "%varlang%"=="" ( set varlang=en-us goto debutscript ) : :debutscript :
pfff ; j'avais même oublié %% dans les if mais ça change rien au bug de echo et comment afficher un nombre de ligne à partir d'une variable pour more ou au moins un nombre fixe écran par écran ; est-ce que l'on peut rediriger les commandes avancées ? mais comment afficher un entête et les lignes d'aides expurgées des caractères "HLP(fr-fr): ".
(( code complet actuel pour "test.bat" ; 11,2 Ko (11 511 octets)
CRC32: 79966942
MD5: 0BD61816CBE694238C91BED2F8356EFF
SHA-1: BED63AC5B1AA5D638E479E14243B9CE9545FC51E
SHA-256: 34BB55491FFC3538442783F3E08CAB2CCDA6A688CBE8524D42A175DBDD1D1A71 ))
Édit 21h33:
Merci s'il vous plaît de m'aider pour le reste pour le même endroit.
Je mets résolu car c'est résolu (mais il y a d'autres questions ci-dessus).
find fonctionne
C:> type f1.txt HLP(fr-fr): cet outil Ó pour but de ... (001) HLP(fr-fr): cet outil Ó pour but de ... (...) rem help (en-us) HLP(en-us): cet outil Ó pour but de ... (001) HLP(en-us): cet outil Ó pour but de ... HLP(en-us): cet outil Ó pour but de ... C:> C:> set varlang=fr-fr C:> find "HLP(%varlang%):" f1.txt ---------- F1.TXT HLP(fr-fr): cet outil Ó pour but de ... (001) HLP(fr-fr): cet outil Ó pour but de ... C:> set varlang=en-us C:> find "HLP(%varlang%):" f1.txt ---------- F1.TXT HLP(en-us): cet outil Ó pour but de ... (001) HLP(en-us): cet outil Ó pour but de ... HLP(en-us): cet outil Ó pour but de ...
slt re-merci pour ta réponse :)) ; faut que je comprenne car c'est pas facile.
(find "HLP(%varlang%):" f1.txt | more /e +3 pour supprimer l'entête "---------- F1.TXT" ; je souhaite un entête personnel "***** help *****" par exemple sur 3 lignes peut-être, pour encadrer l'aide (avec un nombre de ligne non connue à l'avance) pour faire propre sur chaque bloc affiché page par page avec more.)
j'envisage d'utiliser cela (si c'est bon) ; on prend tout après le 1er espace :
Différence entre ces deux options s'il te plaît ?
/L Recherche les chaînes littéralement.
/R Recherche les chaînes en tant qu'expressions.
Trouvé ici je crois :
le . et * par exemple remplacent des caractères donc = /R
le . et * par exemple sont à chercher comme du texte donc = /L
Findstr - Search for strings :
http://ss64.com/nt/findstr.html
On peut pas combiner ? Comment faire pour échapper ?
(( http://windows.developpez.com/faq/batch/?page=fichiers#select_lines_to_display = source du for ))
Comment je peux, s'il te plaît, faire en sorte que 10 et 20 soit dynamique avec find ou findstr pour avoir le numéro des lignes contenant "HLP(%varlang%):" ; aux cas où je modifie le fichier "0%" ? merci
ha, et comment s'il te plaît utiliser delims avec une chaine de caractères pour pouvoir cibler de façon précise ? merci
et aussi s'il te plaît, comment faire pour avoir PLUSIEURS echo traités comme un seul par la commande more (sans fichier tmp en plus) ? merci
+ auto réponse avec question :
Pourquoi echo ne fonctionne pas ou est-ce une astuce que j'ai visualisé ?
En étudiant par le web, j'ai compris un peu le fonctionnement, les variables dans un FOR ne sont modifiées que à la sortie (ou pas du tout ? doute) et pas dans le for SAUF avec cette commande :
setlocal enableextensions enabledelayedexpansion
C'est mal expliqué la différence entre les deux options ou leurs utilités respectives et c'est pas précisé explicitement que l'on peut utiliser les deux options en même temps. Ce n'est pas expliqué l'intérêt de ne pas utiliser l'option, l'une et l'autre. Je n'ai pas compris si un endlocal supprime les variables depuis le dernier setlocal ou si ça remet la valeur comme avant le setlocal si une variable existé avant ; je crois que ça supprime, mais quid des variables système alors ? merci.
merci pour l'aide
(find "HLP(%varlang%):" f1.txt | more /e +3 pour supprimer l'entête "---------- F1.TXT" ; je souhaite un entête personnel "***** help *****" par exemple sur 3 lignes peut-être, pour encadrer l'aide (avec un nombre de ligne non connue à l'avance) pour faire propre sur chaque bloc affiché page par page avec more.)
j'envisage d'utiliser cela (si c'est bon) ; on prend tout après le 1er espace :
for /f "tokens=1,2,* delims=: " %%i in ('findstr /n /r ".*HLP(%varlang%):" %0') do if %%i geq 10 if %%i leq 20 echo %%k
Différence entre ces deux options s'il te plaît ?
/L Recherche les chaînes littéralement.
/R Recherche les chaînes en tant qu'expressions.
Trouvé ici je crois :
le . et * par exemple remplacent des caractères donc = /R
le . et * par exemple sont à chercher comme du texte donc = /L
Findstr - Search for strings :
http://ss64.com/nt/findstr.html
On peut pas combiner ? Comment faire pour échapper ?
(( http://windows.developpez.com/faq/batch/?page=fichiers#select_lines_to_display = source du for ))
Comment je peux, s'il te plaît, faire en sorte que 10 et 20 soit dynamique avec find ou findstr pour avoir le numéro des lignes contenant "HLP(%varlang%):" ; aux cas où je modifie le fichier "0%" ? merci
ha, et comment s'il te plaît utiliser delims avec une chaine de caractères pour pouvoir cibler de façon précise ? merci
et aussi s'il te plaît, comment faire pour avoir PLUSIEURS echo traités comme un seul par la commande more (sans fichier tmp en plus) ? merci
+ auto réponse avec question :
Pourquoi echo ne fonctionne pas ou est-ce une astuce que j'ai visualisé ?
En étudiant par le web, j'ai compris un peu le fonctionnement, les variables dans un FOR ne sont modifiées que à la sortie (ou pas du tout ? doute) et pas dans le for SAUF avec cette commande :
setlocal enableextensions enabledelayedexpansion
C'est mal expliqué la différence entre les deux options ou leurs utilités respectives et c'est pas précisé explicitement que l'on peut utiliser les deux options en même temps. Ce n'est pas expliqué l'intérêt de ne pas utiliser l'option, l'une et l'autre. Je n'ai pas compris si un endlocal supprime les variables depuis le dernier setlocal ou si ça remet la valeur comme avant le setlocal si une variable existé avant ; je crois que ça supprime, mais quid des variables système alors ? merci.
merci pour l'aide
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
avec /r pour rechercher un point et une étoile, et non pas tout comme .* utiliser \.\*
pour trouver le No de ligne, utiliser l'option /n
pour utiliser plusieurs echo dans 1 more, utiliser () : (echo aaa & echo bbb & echo ccc) | more
& est un séparateur de commande, ou alors placer les echo sur plusieurs lignes
pour delims, voir dans l'aide Windows, ex: delims=; délimiteur le ;
delims=xxx Spécifie un jeu de séparateur. Celui-ci remplace le jeu de délimiteur par défaut constitué de l'espace et de la tabulation.
pour trouver le No de ligne, utiliser l'option /n
pour utiliser plusieurs echo dans 1 more, utiliser () : (echo aaa & echo bbb & echo ccc) | more
& est un séparateur de commande, ou alors placer les echo sur plusieurs lignes
pour delims, voir dans l'aide Windows, ex: delims=; délimiteur le ;
delims=xxx Spécifie un jeu de séparateur. Celui-ci remplace le jeu de délimiteur par défaut constitué de l'espace et de la tabulation.