我正在尝试制作一个需要的批处理文件:
git describe
并将输出存储在file.txt
; v1.0
为"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行不起作用?
答案 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。