Bat dos variable dans find ne marche pas help

Résolu/Fermé
librequetucrois - Modifié par librequetucrois le 4/02/2012 à 06:57
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 12 févr. 2012 à 09:57
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
.
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:

5 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
4 févr. 2012 à 07:59
hello
il faut des "
find "%varhelpsearch%" %0 | more /E +3
0
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 :

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).
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
5 févr. 2012 à 10:14
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 ...
0
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 :

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
0

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

Posez votre question
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
12 févr. 2012 à 09:57
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.
0