批处理文件循环通过远程 Git 个分支并将每个分支中的类似 CSV 文件复制到本地目录

Batch File to Loop Through Remote Git Branches and Copy a Similar CSV File in Each Branch to a Local Directory

我对批处理脚本还很陌生。

为了详细说明我的问题,在许多不同的远程 git 分支中找到了一个特定的文件,每个 csv 文件在分支中的内容不同,但命名约定相似。我正在尝试编写一个批处理文件,循环遍历每个远程 git 分支并将该文件复制到本地目录。

值得庆幸的是,每个远程分支都遵循相同的命名约定:一个 3-digit-ID、一个下划线和单词更新(例如 018_update)。源目录具有以下命名格式:3-digit-ID、space 和带有 spaces 的基于文本的名称(例如:8 To Shreds - You Say) .

我已经能够将分支名称放入列表中,然后遍历每个分支名称,但现在我被卡住了。我想知道如何导航的一个问题是我是否能够在 %%a 上使用通配符从远程分支名称中提取 3-digit-ID 并使用它来定位也都包含 3-digit 的目录(和文件名)。

以下是我到目前为止所写的内容:

FOR /F "tokens=*" %%a  IN (
 'git branch -r --list "*???_update*" '
 ) DO (
    git checkout %%a
)
)

假设这是正确的方向,我觉得剩下的就是找到一种方法从远程分支名称(即 %%a) 并用它来制作通配符并从那里找到我想要 copy/paste 的文件。

提前感谢任何能够帮助我解决这个问题的人!

这演示了如何将 <origin>/<###_name*> 形式的字符串解析为两个变量 %%a%%b,然后将 _id 设置为分支的三位前缀姓名。如果您的分支名称看起来更像 <origin>/*###_name*,那么我们将有更多的工作要做,稍后我可以帮助您。

@setlocal EnableExtensions

@for /F "tokens=1,* delims=/" %%a  in ('git branch -r --list *???_upate*') do @call :DoIt "%%a" "%%b"
@exit /b

:DoIt
@REM Ignoring %1, corresponding to %%a, because it's the name of the remote. 
@set "_b=%~2"
@set "_id=%_b:~0,3%"
@echo _id
@REM Use _id to find your directory and file name here.
@exit /b 0