尽管有这个问题涉及Windows CMD,AutoHotkey和MultiMarkdown,但我相信,这个问题与CMD密切相关(我对Windows bat文件缺乏了解)。
因此...
我正在尝试为MultiMarkdown创建AHK脚本,这将允许将mmd文件转换为任何扩展名(不是特别的html)。
这是我用普通蝙蝠文件做到的方法:
chcp 65001
set ext=mmd2html
for %%i in (*.md) do call multimarkdown --escaped-line-breaks --process-html --nosmart "%%i" > %%~ni.%ext%
这很有效。如果将此bat文件与mmd文件一起放置,它将正确转换并重命名它们。
但是,当我尝试将此代码放入AHK脚本时,它会失败。这就是我所拥有的:
#SingleInstance, Force
f1::
bat_script =
(join&
chcp 65001
set ext=mmd2html
for `%i in (*.md) do call multimarkdown --escaped-line-breaks --process-html --nosmart "`%i" > `%~ni.`%ext`%
)
Run, %ComSpec% /c %bat_script%, %A_ScriptDir%
return
如何解决?
发布更新
实际问题是,而不是重命名这样的文件:
my_test_file.md --> my_test_file.mmd2html (yes, "mmd2html" is an extension)
它按字面重命名:
my_test_file.md --> my_test_file.%ext%
换句话说,脚本不理解%ext%
是可变的。这是工作 AHK代码,不使用var:
f1::
bat_script =
(join&
chcp 65001
for `%i in (*.md) do call multimarkdown --escaped-line-breaks --process-html --nosmart "`%i" > `%~ni.aaaaaaaa
)
Run, %ComSpec% /c %bat_script%, %A_ScriptDir%
return
但是,我希望将变量用于文件扩展名,因此此处发布的工作代码仅用于演示目的。
答案 0 :(得分:1)
您需要转义内部括号。
for `%i in `(*.md`) do multimarkdown --escaped-line-breaks --process-html --nosmart "`%i">"`%~ni.`%ext`%"
虽然未经测试,但可能不需要转出内部开括号,只需关闭,确保您的块保持为一个。您可以尝试将其作为替代方案并进行报告。
for `%i in (*.md`) do multimarkdown --escaped-line-breaks --process-html --nosmart "`%~i">"`%~ni.`%ext`%"