我正在编写一个简单的脚本来检查我的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
答案 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
中。