比较两个看似相同的变量不会触发if语句BATCH文件

时间:2017-10-13 16:29:55

标签: git batch-file

我正在编写一个简单的脚本来检查我的git分支是否是最新的,但是当我尝试将git status的输出与我的预定义字符串进行比较时if if statment永远不会触发,即使echo %% i和显示与我相比的完全相同的字符串。

   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

任何帮助都会有所帮助,这是我关于堆栈交换的第一个问题所以请告诉我我是否做错了什么。替代的方法也很复杂,但我不需要安装额外的程序。

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 . . .

解决方案: 我没有在变量周围使用引号。

    IF /I "%%~i"=="%msg%" Echo uptodate

1 个答案:

答案 0 :(得分:0)

您不需要EnableDelayedExpansion,使用For循环甚至进行If比较。

这会达不到您的目标吗?

@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

您也可以选择将不区分大小写的 /I 选项包含在Find中。