如果通过AutoHotkey启动,Bat脚本将停止工作

时间:2017-04-19 03:14:26

标签: batch-file cmd autohotkey

尽管有这个问题涉及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

但是,我希望将变量用于文件扩展名,因此此处发布的工作代码仅用于演示目的。

1 个答案:

答案 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`%"