繁体   English   中英

如何在Windows cmd上执行git log?

[英]How to execute git log on windows cmd?

我有以下命令:

git log --pretty=tformat:'<li>%h %ci %d %s</li>' > changelog.html

这将git日志保存到changelog.html文件中。 当我通过git bash执行它时,它工作正常,但是当我将此代码放在.bat文件中并运行它时,我收到以下错误:

The system could not find the specified file

我认为这是由格式参数的引号引起的,但我不知道如何解决问题...有没有办法逃避引号呢?

在Windows批处理文件中,您必须:

  • %字符。 他们被视为文字
  • 使用引号来保护嵌入的空格或其他特殊字符。 例如>
git log --pretty=tformat:"<li>%%h %%ci %%d %%s</li>" > changelog.html
  • 通常,您还可以使用^来转义未加引号的字符串中的单个字符(例如, ^%表示文字% ,或^|表示文字| ),但这不起作用 ,因为以下警告
    不能使用^来转义空格字符以形成具有嵌入空格的单个参数; 例如, foo^ bar仍然分为2个参数, foobar

来自Unix世界的读者的一些背景

  • 在Windows批处理语言中, 没有相当于类似POSIX的shell的引号字符串字面意义上的字符串,没有发生扩展)。
    • 引号通常在Windows批处理语言中没有特殊含义 (在某些特殊上下文中除外,例如for循环) - 它们不能用于分隔具有嵌入空格的字符串。
  • 因此,类似于你怎么也逃脱$双引号的bash字符串作为\\$防止膨胀,你有逃跑%作为%%在双引号字符串,以防止在批处理文件的扩展 ,因为标识符括在%字符。 (例如, %PATH% )表示要扩展的变量引用
    • 好奇的是一个互动 cmd.exe提示不需要逃逸% ,而批处理文件执行。 更具体地说, % chars。 在交互式命令行中被视为文字, 除非它们是对现有变量的变量引用的一部分(例如, %windir% ),在这种情况下会发生扩展。 这一奇怪现象是,原因for循环必须写成for %i in ...一个 % )在命令行上,并作为for %%i in ... %在批处理文件)。
  • 警告将双引号字符串传递给批处理文件 :当传递用双引号括起来的参数时, 双引号包含在参数值中 ; ~参数修饰符可用于剥离它们 ; 例如, %~1返回没有双引号的第一个参数(如果有的话)。
  • 最后, 的配对\\一POSIX壳没有引号的字符串-escaping 各个字符^ -escaping,但是,如上所述, ^不能使用,以形成带有嵌入空白一个参数逸出的空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM