BAT 文件文本颜色在 Git 失败后不起作用

问题描述 投票:0回答:1

我在 Windows 10 命令提示符下运行的 BAT 文件中有以下代码。

FOR /F %%a IN ('ECHO prompt $E ^| cmd') DO SET "ESC=%%a"

FOR /D %%f IN (%loc%) DO (
    PUSHD %%f
    IF EXIST %%f\.git (
        FOR /F "delims=" %%b IN ('git rev-parse --abbrev-ref HEAD') DO (
            FOR /F "delims=" %%s IN ('git status -sb -uno --ignore-submodules=all') DO (
                SET r=%%s
                FOR %%t IN ("%%s") DO (
                    IF "!r:behind=!" NEQ %%t (
                        ECHO %ESC%[33m%%f%ESC%[0m
                        @git pull origin %%b
                    ) ELSE (
                        ECHO %ESC%[36m%%f has no changes%ESC%[0m
                    )
                )
            )
        )
    )
    POPD
)

还有更多代码来设置起始值,但这是主力循环。 只要“@git pull ...”命令成功拉取文件,一切都会正常工作。 但是,如果没有,如所示的情况,它将停止显示带有颜色的文本,并简单地使用转义序列回显文本。 这是一个示例(请注意,命令提示符在黑色背景上有白色文本,没有颜色命令):

C:\Develop\Repo1 has no changes < this is blue text
C:\Develop\Repo2 has no changes < this is blue text
C:\Develop\Repo3 < this is yellow text, the following Git output is white text
From https://dev.azure.com/Home/_git/Repo3
 * branch            main       -> FETCH_HEAD
Updating 5a4f07a..4d923ef
error: Your local changes to the following files would be overwritten by merge:
        App.config
Please commit your changes or stash them before you merge.
Aborting
←[36mC:\Develop\Repo4 has no changes←[0m < This is white text, but should be blue without the escape sequences
←[36mC:\Develop\Repo5 has no changes←[0m < This is white text, but should be blue without the escape sequences

另请注意,如果后续 Git 存储库成功提取文件,文本着色将再次开始工作。 这让我相信,当 Git 命令“中止”时,会发生一些事情,影响 BAT 文件(或命令提示符)处理 ESC 字符的方式。 有谁有关于如何解决这个问题的任何信息或想法吗?

git batch-file colors output
1个回答
0
投票

我会尝试

                    ECHO %ESC%[33m%%f%ESC%[0m
                    setlocal
                    @git pull origin %%b
                    endlocal

在子 shell 中执行

git

...没有保证 - 只是一个建议。

© www.soinside.com 2019 - 2024. All rights reserved.