@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q46747991.txt"
REM ************************ HIGH SCORES TABLE
REM **********************************************
:highscorestable
set /a count = 0
SET "manyspaces= "
for /f "tokens=1,2,3 delims=-" %%i in (%filename1%) do (
set hs=%%k&CALL :align hs -8
set hsn=%%i&CALL :align hsn 15
set hsv=%%j&CALL :align hsv 10
ECHO !hsn!!hsv!!hs!
set /a count+=1
if "!count!"=="5" goto end
)
:end
echo.
GOTO :EOF
:align
IF %2 gtr 0 (
CALL SET "%1=%%%1%%%manyspaces%"
CALL SET "%1=%%%1:~0,%2%%"
) ELSE (
CALL SET "%1=%manyspaces%%%%1%%"
CALL SET "%1=%%%1:~%2%%"
)
GOTO :eof
J'ai effectué vos résultats pour un fichier source que je nommé en fonction de mon système, d'où la séquence des coulées est différente de votre source inédite. J'ai changé l'affectation métavariable en conséquence.
La routine :align
épluche les pommes de terre en reconnaissant le second argument comme étant la largeur de colonne requise, positif pour l'alignement à gauche et négatif pour l'alignement à droite.
La variable manyspaces
est définie sur une valeur évidente, de longueur suffisante pour gérer la colonne la plus large requise. Évidemment, puisqu'il ne changera pas une fois établi, il est préférable de le définir au tout début du lot.
La routine utilise la méthode call set %%var%%
afin qu'elle fonctionne même si delayedexpansion
est appelée ou non.
Les mécaniciens sont, par exemple
CALL SET "%1=%%%1%%%manyspaces%"
avec %1
= fred
Tout d'abord, analyser la commande.%1
est remplacé par fred
et %%
par %
, ce qui donne
mis
"fred =
% fred% [espaces]"
ajoute donc l'espace-chaîne à la valeur actuelle du variable d'environnement spécifiée comme %1
La deuxième set
- analyse de manière similaire; résultat est affecté à la variable d'environnement spécifié en tant %1
Ainsi, la routine peut être utilisé pour générer une chaîne de largeur fixe, de manière appropriée alignée en utilisant une variable ordinaire, même si la variable a une valeur de rien (ie. est undefined)
Vous saviez donc que vous deviez utiliser une extension retardée avec un ensemble de variables, mais vous ne pensiez pas en avoir besoin pour les autres variables? – Squashman