批处理文件运行git描述commadn和以后修改
问题描述:
我想使这是需要一个批处理文件:批处理文件运行git描述commadn和以后修改
- 运行
git describe
和存储在file.txt
输出; - 修改相同或其他文件中文件的内容,例如
v1.0
as"v1.0"
; - 或只是简单地在
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行不起作用?
答
我敢肯定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
答
你也可以考虑写一个实际的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上工作。
你为什么用'start'和'cmd/K'来运行'git describe'?我认为你可以删除两个... – aschipfl
我不明白2倒票或近距离投票。 OP声明了总体目标,提供了现有的代码,并提出了一个关于代码不能正常工作的特定编程问题。对我来说,这完全合理,正是我认为我们在这个社区寻找的东西。 – dbenham