Mat*_*ari 3 windows git bash batch-file
我有以下命令:
git log --pretty=tformat:'<li>%h %ci %d %s</li>' > changelog.html
Run Code Online (Sandbox Code Playgroud)
这将git日志保存到changelog.html文件中.当我通过git bash执行它时,它运行正常,但是当我将此代码放在.bat文件中并运行它时,我收到以下错误:
The system could not find the specified file
我认为这是由格式参数的引号引起的,但我不知道如何解决问题...有没有办法逃避引号呢?
mkl*_*nt0 11
在Windows批处理文件中,您必须:
%字符.他们被视为文字>:git log --pretty=tformat:"<li>%%h %%ci %%d %%s</li>" > changelog.html
Run Code Online (Sandbox Code Playgroud)
^转义单个字符(例如,表示文字或 表示文字),但这在此处不起作用,因为以下警告:
您不能用于转义空格字符命令与嵌入的空格形成单个参数; 例如,仍然分为2个参数,和.^%%^||^foo^ barfoobar来自Unix世界的读者的一些背景:
for循环) - 它们不能用于分隔具有嵌入空格的字符串.$在双引号bash字符串中\$进行转义%%%以防止扩展,你必须像双引号字符串一样转义,以防止批处理文件中的扩展,因为字符串包含在%字符中.(例如,%PATH%)表示要扩展的变量引用.
cmd.exe提示并不需要逃避%,而批处理文件执行.更具体地说,%字符.在交互式命令行中被视为文字,除非它们是对现有变量的变量引用的一部分(例如%windir%),在这种情况下,确实会发生扩展.这种奇怪的原因是for循环必须在命令行中写为for %i in ...(一 %),在批处理文件中写为for %%i in ...(二 %).~参数修改器可以用于剥离它们 ; 例如,%~1返回没有双引号的第一个参数(如果有的话).\-escaping 个体在一个字符没有引用的字符串在POSIX壳^-escaping,但是,如所述的,^不能用于以形成带有嵌入空白一个参数逸出的空间.