批处理文件循环通过远程 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
我对批处理脚本还很陌生。
为了详细说明我的问题,在许多不同的远程 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