簡體   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