【发布时间】:2017-09-15 02:09:15
【问题描述】:
尽管这个问题涵盖了 Windows CMD、AutoHotkey 和 MultiMarkdown,但我相信这个问题与 CMD 密切相关(我对 Windows bat 文件缺乏了解)。
所以...
我正在尝试为 MultiMarkdown 创建 AHK 脚本,这将允许将 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
如何解决?
帖子更新
实际的问题是,不是像这样重命名文件:
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
但是,我想要使用变量作为文件扩展名,所以这里发布的工作代码仅用于演示目的。
【问题讨论】:
-
反引号是 AHK 转义吗?如果是这样,您的 AHK 对您的批次的
%字符数是不同的。 -
@Magoo 是的,反引号是 AHK 转义字符。据我所知,如果 bat-script 从 bat 文件启动,我们应该使用
%%,如果相同的代码直接粘贴到 cmd 窗口中,我们应该使用单个%。这就是我减少它们的原因。不过,我也试过for%%i in (*.md) do call multimarkdown --escaped-line-breaks --process-html --nosmart "%%i" >%%~ni.%ext%。它会立即关闭 cmd 窗口,没有任何效果。 -
“它失败了”不是很具体。但是您确定您的 AHK 脚本知道要处理哪个目录吗?试试
for %i in ("c:\full path\*.md") do ...或cd /d "c:\full path" & for %I in (*.md) do...(我会留给你适当的转义,因为我不会说AHK) -
或者,回应 Stephan 的担忧,如果
%A_ScriptDir%指定了命令运行的“当前目录”,请确保指向.md文件所在的位置(我也不知道 AHK) . -
@Stephan 是的,我确定,请参阅我之前的评论。 “失败”意味着不是将文件
my_test_file.md重命名为my_test_file.mmd2html,而是将其重命名为my_test_file.%ext%。字面上地。出于某种原因,它不明白%ext%是可变的。我已经更新了帖子。
标签: batch-file cmd autohotkey