2017-04-19 87 views
0

尽管此问题涵盖Windows CMD,AutoHotkey和MultiMarkdown,我相信,这个问题与CMD(我缺乏Windows bat文件知识)密切相关。蝙蝠脚本停止工作,如果通过AutoHotkey启动

所以......

我试图创建AHK脚本的MultiMarkdown,这将使MMD文件转换为任何分机(不是格外HTML)。

这是我能如何与普通的bat文件做到这一点:

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 

它是如何解决的?


更新的Post

实际的问题是,不是重命名文件是这样的:

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

是AHK逃脱的反响吗?如果是这样,你的AHK与你的批处理的'%'字符的计数是不同的。 – Magoo

+0

@Magoo是的,反引号是AHK转义字符。据我所知,如果bat-script从bat-file启动,我们应该使用'%%',如果相同的代码直接粘贴到cmd窗口中,我们应该使用'%'。这就是我减少他们的原因。然而,我也尝试过'('.md)'%'%i调用multimarkdown --escaped-line-breaks --process-html --nosmart“'%'%i”>'%'% 〜ni.'%ext'%'。它会立即关闭cmd窗口,没有任何影响。 –

+2

“它失败”不是很具体。但是您确定,您的AHK脚本知道,要处理哪个目录?在(* .md)中为%i在(“c:\ full path \ *。md”)中做%1或'cd/d“c:\ full path”& '(我会离开你的,因为我不会说AHK) – Stephan

回答

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`%" 
+0

谢谢。第二个例子我已经尝试了很多次,看到我的评论原来的帖子。它不起作用 - CMD窗口刚刚关闭。顺便说一下,如果我不使用变量进行扩展,AHK可以正常工作。我会在几分钟后更新我的帖子,以显示可用的AHK代码。 (但我*希望*使用变量,所以它仅用于演示目的)。 –

+0

你还没有提到完全尝试它,你的例子没有逃过括号只有百分数。在确定你的其他块是正确的之后,请尝试我已经使用过的。 – Compo

+0

哦,对不起,我没有提到它。是的,我尝试了两个例子,即转义括号和单个圆括号。它不起作用 - 窗口即刻关闭。这非常奇怪。例如,如果我从代码中抛弃MultiMarkdown并使用简单的“ren”命令,那么即使对于变量,它也能成功运行。 –