我想捕获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
只会分配结果。因此,在这种情况下,它会将错误消息分配给变量。