J'écris un simple script pour vérifier si ma branche git est à jour, mais quand j'essaie de comparer la sortie du statut git avec ma chaîne prédéfinie le si statment ne se déclenche jamais même si echo %% i et affiche exactement la même chaîne que je compare.Comparer deux variables apparemment identiques ne déclenche pas si instruction BATCH-fichier
SETLOCAL ENABLEDELAYEDEXPANSION
echo off
D:
cd D:\GitHub\goworkspace\src\Programvareutvikling
set cmd="git status -uno"
set msg=Your branch is up-to-date with 'origin/Server'.
FOR /F "tokens=*" %%i IN (' %cmd% ') DO (
REM this line never triger even when it seems like it should
set X=%%i
IF !X! == %msg% Echo uptodate
)
pause
Toute aide serait apréciée, ceci est ma première question sur l'échange de pile alors s'il vous plaît dites-moi si je fais quelque chose de mal. D'autres soulutions sont également appréciées, mais je préférerais ne pas avoir à installer d'autres programmes.
This is the output:
echo %msg% >Your branch is up-to-date with 'origin/Server'.
echo !X! >Your branch is up-to-date with 'origin/Server'.
echo %msg% >Your branch is up-to-date with 'origin/Server'.
echo !X! >nothing to commit (use -u to show untracked files)
Press any key to continue . . .
Solution: Je n'utilisais pas des guillemets autour des variables.
IF /I "%%~i"=="%msg%" Echo uptodate
Je supprimer les guillemets de cette ligne: 'set cmd =" git status -uno "' – Squashman
Est-ce que cela et le programme a couru comme avant, la sortie est toujours exactement la même chose, mais l'instruction if fait toujours pas de déclencheur – coder5432
Vous devez mettre des guillemets dans votre comparaison car il y a des espaces dans votre chaîne et j'utiliserais simplement la variable FOR isntead. 'IF/I" %% ~ i "=="% msg% "Echo uptodate'. – Squashman