批处理文件以循环通过远程 Git 分支并将每个分支中的类似 CSV 文件复制到本地目录
Posted
技术标签:
【中文标题】批处理文件以循环通过远程 Git 分支并将每个分支中的类似 CSV 文件复制到本地目录【英文标题】:Batch File to Loop Through Remote Git Branches and Copy a Similar CSV File in Each Branch to a Local Directory 【发布时间】:2021-07-02 07:26:10 【问题描述】:我对批处理脚本非常陌生。
为了详细说明我的问题,在许多不同的远程 git 分支中都有一个特定的文件,每个 csv 文件在分支中的内容不同,但在命名约定上相似。我正在尝试编写一个循环遍历每个远程 git 分支并将该文件复制到本地目录的批处理文件。
谢天谢地,每个远程分支都遵循相同的命名约定:3 位数的 ID、下划线和单词 update(例如 018_update
)。源目录具有以下命名格式:3 位 ID、空格和带空格的基于文本的名称(例如:\018 To Shreds - You Say
)。
我已经能够将分支名称放入列表中,然后循环遍历每个分支名称,但现在我被卡住了。我想知道如何导航的一个问题是我是否能够在%%a
上使用通配符从远程分支名称中提取 3 位 ID 并使用它来定位目录(和文件名)也都包含其中的 3 位数字。
这是我目前所写的:
FOR /F "tokens=*" %%a IN (
'git branch -r --list "*???_update*" '
) DO (
git checkout %%a
)
)
假设这是正确的方向,我觉得剩下的就是找到一种方法从远程分支名称(即%%a
)中获取 3 位 ID 并使用它来制作通配符并找到我要复制/粘贴的文件。
提前感谢任何能够帮助我解决这个问题的人!
【问题讨论】:
见help set
。还有help call
和help setlocal
。我会使用简单的...do @call ...
而不是括号中的多行代码块 `...do (...multi-line code block...)。
您是否使用origin
以外的远程名称?
【参考方案1】:
这演示了如何将<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
【讨论】:
以上是关于批处理文件以循环通过远程 Git 分支并将每个分支中的类似 CSV 文件复制到本地目录的主要内容,如果未能解决你的问题,请参考以下文章