2017-04-19 5 views
0

この質問にもかかわらず、Windows CMD、AutoHotkey、およびMultiMarkdownについては、CMD(Windowsのbatファイルに関する知識が不足しています)と密接に関連しています。だから、AutoHotkeyで起動した場合、バットスクリプトが動作しなくなる

...私は任意の拡張子(ないparticulary HTML)にMMDファイルを変換することができますMultiMarkdownためのAHKスクリプトを作成しようとしています

chcp 65001 
set ext=mmd2html 
for %%i in (*.md) do call multimarkdown --escaped-line-breaks --process-html --nosmart "%%i" > %%~ni.%ext% 

これは動作します:

これは、私は、プレーンbatファイルでそれを行うことができる方法です。この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

はAHKのエスケープバックティックですか?もしそうなら、 '%'文字の数はあなたのバッチのAHKと異なります。 – Magoo

+0

@Magooはい、バッククォートはAHKエスケープ文字です。もし私が知っているように、bat-scriptがbat-fileから起動されていれば '%%'を使うべきです。そして、同じコードがcmdウィンドウに直接貼り付けられたならば '%'を使うべきです。これが私を減らした理由でした。しかし、私も、マルチマークダウン - エスケープ - 改行 - プロセス - html --nosmart "'% '%i"> '%'%(* .md) 〜ni.'%ext'% '。何も影響を与えずにすぐにcmdウィンドウを閉じます。 –

+2

"それは失敗"はあまり具体的ではありません。しかし、あなたのAHKスクリプトはどのディレクトリを処理するのか分かりますか? ''完全なパス\ *。md ")do ...'または 'cd/d" c:\フルパス "で%iを試してみてください。 – Stephan

答えて

1

内部カッコをエスケープする必要があります。内部開口部の括弧をエスケープ、テストされていないが必要とされないかもしれないが

for `%i in `(*.md`) do multimarkdown --escaped-line-breaks --process-html --nosmart "`%i">"`%~ni.`%ext`%" 

は、あなたのブロックを確保するだけで閉じたものは1のままです。あなたは代わりとしてそれを試して、報告することができます。

for `%i in (*.md`) do multimarkdown --escaped-line-breaks --process-html --nosmart "`%~i">"`%~ni.`%ext`%" 
+0

ありがとうございます。私はすでに何度も自分自身を試してみた2番目の例は、元の投稿への私のコメントを参照してください。それは動作しません - CMDウィンドウはただちに終了します。ちなみに、拡張用に変数を使用しないと、AHKは正常に動作します。 AHKコードを表示するために私の投稿を数分で更新します。 (しかし、私は*変数を使うことを望んでいるので、デモンストレーションの目的のためだけです)。 –

+0

あなたはまったく試したことは言及していません、あなたの例はパーセントだけ括弧をエスケープしませんでした。ブロックの残りの部分が正しいことを確認した後、私が使ったことを試してください。 – Compo

+0

ああ、申し訳ありませんが、私はそれを言及していません。はい、両方の例を試しました。つまり、かっこと単一カッコの両方をエスケープしています。それは動作しません - ウィンドウはすぐに終了しています。それはすべて非常に奇妙です。たとえば、MultiMarkdownをコードから取り除き、単純な "ren"コマンドを使用すると、変数でも正常に動作します。 –

関連する問題