如何在Windows下解析git状态的输出并用批处理文件将其发送到另一个程序



我想捕获git status -s的结果,它将输出如下内容:

M /path/to/modified/file.py
M /path/to/another/modified/file2.py

前3个字符将被删除。我想要这个:

/path/to/modified/file.py, /path/to/another/modified/file2.py

(取git status -s的每一行,去掉前3个字符,并用逗号将它们粘在一行上(。

然后,我会将该字符串发送给另一个程序(作为参数(,该程序将处理这些文件。

在Windows下用批处理(.bat(文件可以做到这一点吗?

我看到你可以用set str=%str:~3,10%之类的东西做一个子串,但我还没有找到如何捕获git的输出,并按行分割,得到每一行的长度。。。

我的系统中没有git,因此这是未经测试的,结果仅基于您问题中的示例。

for循环将把每个结果分配给元变量%%i。在这种情况下,首先我们去掉前两个字符M,然后将每个结果附加到一个变量。然后,我们简单地去掉,的前两个字符

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('git status -s') do (
set "tmp=%%i"
set "tmp=!tmp:~2!"
set "result=!result!,!tmp!"
)
echo %result:~2%

注意

如果结果来自stdout而不是stderr,则for只会分配结果。因此,在这种情况下,它会将错误消息分配给变量。

相关内容

最新更新