批处理文件运行git描述commadn和以后修改

问题描述:

我想使这是需要一个批处理文件:批处理文件运行git描述commadn和以后修改

  1. 运行git describe和存储在file.txt输出;
  2. 修改相同或其他文件中文件的内容,例如v1.0 as "v1.0";
  3. 或只是简单地在v1.0之前和之后加"在同一个文件中;

我已经写了一个批处理文件,但它没有根据需要给出输出。以下是我已经写了:

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行不起作用?

+1

你为什么用'start'和'cmd/K'来运行'git describe'?我认为你可以删除两个... – aschipfl

+2

我不明白2倒票或近距离投票。 OP声明了总体目标,提供了现有的代码,并提出了一个关于代码不能正常工作的特定编程问题。对我来说,这完全合理,正是我认为我们在这个社区寻找的东西。 – dbenham

我敢肯定git会在输出中包含一个换行符,所以即使你拿到了SET/P打印您",你的输出将是:

"v1.0 
" 

我相信最简单的解决方案你的问题是用FOR/F捕获你的git命令的输出,然后在循环中写出你的引用值。

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



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

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

start cmd.exe /c "git describe >>"file.txt"" 

但是根本不需要START。你可以简单地直接从当前会话

git describe >>"file.txt" 

试图使用SET/P打印出一个"不换行运行命令。这失败了,因为SET/P有一些odd rules for how it handles leading quotes, white space, and =

的任可用于单"的输出重定向到一个文件中:

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

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

set /p =^""" <nul >file.txt 
set /p =""^" <nul >file.txt 
set /p ^"="""" <nul >file.txt 
set /p "="^""" <nul >file.txt 
set /p "="""^" <nul >file.txt 
+0

感谢您的详细解释。我很难理解 {for/f“delims =”%% A('git describe')echo“%% A”> file.txt}。关键字后的“/ f”的目的是什么?它如何影响过程? – Learner

+0

@ Learner-'FOR/F ... IN('command')DO'逐行循环命令的结果。 ''delims =“'设置令牌分隔符为空,因此整行保留。从命令提示符使用'help for'或'for /?'来查看文档。 – dbenham

你也可以考虑写一个实际的bash脚本(甚至在Windows上):它命名为git-descr(没有扩展名),它保存在你的%PATH%,并用命令git descr称之为:在%PATH%任何git-xxx脚本由git bash执行。

Adding double-quotes is then easy

#!/bin/bash 
cd /c/path/to/local/repo 
d=$(git describe) 
echo "\"${d}\"">file.txt 

此外,这将在Windows上工作。