2017-10-13 1 views
-1

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 
+0

Je supprimer les guillemets de cette ligne: 'set cmd =" ​​git status -uno "' – Squashman

+0

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

+0

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

Répondre

0

Vous ne devriez pas besoin de EnableDelayedExpansion, utilisez une boucle For ou même faire une comparaison If.

Cela n'atteindrait-il pas votre objectif?

@Echo Off 
CD /D "D:\GitHub\goworkspace\src\Programvareutvikling" 
Set "cmd=git status -uno" 
Set "msg=branch is up-to-date" 
%cmd%|Find "%msg%">Nul&&(Echo up to date)||Echo needs updating 
Pause 

Vous pouvez éventuellement inclure la casse, /I option avec Find aussi.

+0

Cela a fonctionné encore mieux :) – coder5432