批处理文件运行git describe commadn,然后修改它

时间:2016-12-29 05:58:54

标签: git batch-file

我正在尝试制作一个需要的批处理文件:

  1. 运行git describe并将输出存储在file.txt;
  2. 修改相同或其他文件中的文件内容,例如: v1.0"v1.0";
  3. 或只是在同一文件中"之前和之后添加v1.0;
  4. 我已经编写了一个批处理文件,但它没有按要求提供输出。这是我写的:

    cd C:path to project directory
    set /p=^"<nul > file.txt
    start cmd.exe /k "git describe >>"file.txt" & exit"
    set /p= ^"<nul >> file.txt
    

    虽然我想要v2.9,但输出为"v2.9"。为什么第2和第4行不起作用?

2 个答案:

答案 0 :(得分:1)

我很确定git会在输出中包含换行符,所以即使你有SET / P打印你的 var owl1 = $("#main-demo"); owl1.owlCarousel({ navigation: true, // Show next and prev buttons slideSpeed: 300, pagination:false, singleItem: true, transitionStyle: "fade", navigationText: ["", ""] });// Custom Navigation Events owl1.trigger('owl.play', 4500); ,你的输出也会是:

"

我认为解决问题的最简单方法是使用FOR / F捕获git命令的输出,然后在循环中写入引用的值。

"v1.0
"


以下是您发布的代码的一些问题:

你想用START启动git,然后退出。您使用了/ K选项,它在命令执行后保持新的cmd会话处于活动状态,因此您不得不附加EXIT命令。更简单地使用/ C选项

@echo off
cd /d "c:path to project directory"
for /f "delims=" %%A in ('git describe') echo "%%A" >file.txt

但根本不需要START。您只需直接从当前会话

运行命令即可
start cmd.exe /c "git describe >>"file.txt""

您尝试使用SET / P打印单个git describe >>"file.txt" 而没有换行符。这失败了,因为SET / P有一些odd rules for how it handles leading quotes, white space, and =

以下任一项都可用于将单个"的输出重定向到文件:

"

我把重定向放在前面,所以你不必担心奇怪的引用将重定向转换为文字字符串。如果你将重定向放在最后,那么你必须转义其中一个引号。

<nul >file.txt set /p ="""
<nul >file.txt set /p "=""""

答案 1 :(得分:1)

您还可以考虑编写一个实际的bash脚本(甚至在Windows上):将其命名为git-descr(无扩展名),将其保存在%PATH%中,然后使用命令{{1}调用它}:git descr中的任何git-xxx脚本都将由git bash执行。

Adding double-quotes is then easy

%PATH%

同样,这适用于Windows。