- help FOR tokens=1,2* et le caractére * [Résolu] - Shell/Batch - Programmation
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>.
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 ?
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 |
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.
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 .
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 ?
Marsh Posté le 10-08-2006 à 17:26:24
for /f "tokens=1,* delims= " %%i in (toto.txt) do echo %%i %%j
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.
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.
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:
Y-a-t-il un forumeur ici qui puisse m'aider ?
Message édité par webding le 10-08-2006 à 17:43:55