[Résolu] - help FOR tokens=1,2* et le caractére *

- help FOR tokens=1,2* et le caractére * [Résolu] - Shell/Batch - Programmation

Marsh Posté le 09-08-2006 à 17:24:13    

Bonjour j'ai besoin d'un petit conseil sur un boucle FOR, c'est à propos du caractère joker * et tokens=1,2*, dans l'aide en ligne de commande pour FOR il est dit que le caractère * pertmet de récupérer tout ce qui se trouve derrière la partie tu texte à récupérer pour le corp de la boucle référencer par le numéro 2 par exemple, mais dans ma boucle que je poste ci-dessous ca ne marche pas:  
 

Code :
  1. for /f "tokens=1,2* delims= " %%i in ('du ') do if %%i equ 0 echo %%i %%j

 
 
Y-a-t-il un forumeur ici qui puisse m'aider ?


Message édité par webding le 10-08-2006 à 17:43:55
Reply

Marsh Posté le 09-08-2006 à 17:24:13   

Reply

Marsh Posté le 09-08-2006 à 21:37:03    

Normal si les colonnes sont séparées par les tabulations et que tu définis delims=<espace>.

Reply

Marsh Posté le 09-08-2006 à 21:42:19    

Oui mais la caractére * n'est pas forcer 2 à afficher tous ce qu'il reste ?

Reply

Marsh Posté le 09-08-2006 à 21:59:10    

C'est quoi la sortie de du et celle de ta boucle ?

Reply

Marsh Posté le 09-08-2006 à 22:03:42    

du affiche les poid des répertoires, comme ceci:
 

Citation :

45 C:\chemin\du\répertoire


http://pic.aceboard.net/img/5476/8954/1155154118.jpg
 
tokens=1 récupére le poids, et tokens=2 récupére le chemin
 
 
Je ne peux utiliser que espace comme délimitateur, et si les chamins contiennent des espaces, tout se qui a derière le dernier espace n'est pas afficher.

Message cité 1 fois
Message édité par webding le 09-08-2006 à 22:08:37
Reply

Marsh Posté le 10-08-2006 à 10:50:45    

J'attendais plutôt à une analyse perso de ta part de la sortie qu'une capture d'écran :D.
 

webding a écrit :

tokens=1 récupére le poids, et tokens=2 récupére le chemin


--> uniquement si les colonnes sont séparées par un ou des espaces (cf. mon premier message), sinon, la condition %%i equ 0 ne va s'appliquer à aucune ligne.
 
Quelle est ta version de du ?
 
Déjà, si tu remplaces la commande à l'intérieur de for :
if %%i equ 0 echo %%i %%j
par
echo i="%%i"; j="%%j"
est-ce que tu obtiens les bonnes valeurs de i ?

Reply

Marsh Posté le 10-08-2006 à 16:11:16    

Voilà la résultat sii je remplace ce que tu m'a dis:
 
http://pic.aceboard.net/img/5476/8954/1155219064.jpg

Reply

Marsh Posté le 10-08-2006 à 17:26:24    

for /f "tokens=1,* delims= " %%i in (toto.txt) do echo %%i %%j


Message édité par maciew le 10-08-2006 à 17:27:00
Reply

Marsh Posté le 10-08-2006 à 17:43:28    

Ah, ok, merci beaucoup  :)  
 
 
Donc le caractére * prend une nouvelle lettre, c'est ce que je n'avait pas compris.


Message édité par webding le 10-08-2006 à 17:43:36
Reply

Marsh Posté le 26-02-2009 à 11:32:27    

Je doit intergré une variable dans l'execution d'une commande bat.
La commande doit contenir la reference de la valeur installdir d'une application installez dans le systeme.
Quand l'adresse du dossier dans la valeur est d'une traite sans éspace, ça fonctionne, mais dans le cas que ce même programme est installez dans "Program Files", ça ne marche plus.
 
 
setlocal enabledelayedexpansion
 
set TESTK=HKLM\Software\Garmin\WebUpdater
set TESTV=InstallDir
call :reg_read "%TESTK%" "%TESTV%" || (echo ERROR: no value found for InstallDir & exit /b 1)
 
exit /b 0
 
:reg_read <key> <value>
setlocal
 
set key=%~1
set value=%~2
 
REM // make one call to reg to make sure the KEY/VALUE exists before reading it
reg query "%key%" /v "%value%" 1>nul 2>&1 || (exit /b 1)
 
for /f "tokens=2,*" %%a in ('reg query "%key%" /v "%value%" ^| findstr /c:"%value%"') do (set data=%%b)
 
if {%data%}=={} (endlocal & exit /b 1)
 
endlocal & set RETURN=%data%
 
echo %RETURN%
 
 
REM This is installed in C:\Garmin\WebUpdater\Webupdater.exe
REM Or could also be installed in C:\Garmin\WebUpdater.exe
REM This works great
 
REM The same issue applies with MapSource:
REM It can be in C:\Garmin and in C:\Garmin\Program Files\
 
REM So I've tried differnt things on my own but it didn't workout:
 
@echo off
 
setlocal EnableDelayedExpansion
 
REM MapSource InstallDir Finder
REM ---------------------------------------
 
set TESTA=HKLM\Software\Garmin\MapSource\Products
set TESTB=InstallDir
call :reg_read "%TESTA%" "%TESTB%" || (echo ERROR: no value found for InstallDir & exit /b 1)
 
exit /b 0
 
:reg_read <key> <value>
setlocal
 
set key=%~1
set value=%~2
 
reg query "%key%" /v "%value%" 1>nul 2>&1 || (exit /b 1)
 
for /f "tokens=2,* delims= " %%a in ('reg query "%key%" /v "%value%" ^| findstr /c:"%value%"') do (set data=%%b)
 
if {%data%}=={} (endlocal & exit /b 1)
 
endlocal & set Mapsource=%data%
 
echo %MapSource%
 
REM I already got echo result: Files\Garmin\ unattend error
REM I already got echo result: C:\Program unattend error
REM This results by changing values in token and delims, but never found the right way.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed