コマンドプロンプトと同じ事をする

このページでは TextRunRun でコマンドプロンプトと同じ事をする方法について説明します。

コマンドプロンプトの仕様により、コマンドプロンプトのコマンドは以下のパラメータをつけて実行すれば外部のソフトなどから実行ができる様です。

%ComSpec% /c [ コマンド ]

TextRunRun も、この方法を使えばコマンドプロンプトのコマンドを実行する事ができます。

補足

他にも

Run , cmd /c [ コマンド ]

この記述で使う方法もあります。

続きを見る

それと、 %ComSpec%
C:\WINDOWS\system32\cmd.exe を意味しているので、

C:\WINDOWS\system32\cmd.exe /c [ コマンド ]

この記述と同じ事です。

単純にコマンドの実行をする事さえできれば上記の方法でいい事になります。

ですが、これだと実行した結果やエラーの表示がされません。

なので、それを取得できる様にして使える様にします。

コマンドプロンプトと同じ事をするアイテム

コマンドプロンプトと同じ事ができる様にする アイテム を作った例を紹介します。

TextRunRunfromFileName を使って作った例を挙げます。

今回の例で使っているファイルは、以下のリンクからダウンロードできます。

runOutfileStorage.zip

( 2.6 KByte )
1_outfile_runStdOut.txt
global outfile_command =
global outfile_stdout =
global outfile_output = %A_ScriptDir%\output.txt

これは 起動時に実行するアイテム です。

続いて、以下が実行する時に使う アイテム です。

outfile_runStdOut.txt
outfile_command = %B_itemArgAll%
if( outfile_command == "" ){
    return
}
RunWait, %ComSpec% /c %outfile_command% > "%outfile_output%" 2>&1, , Min
Sleep, 1000
FileRead, outfile_stdout, %outfile_output%
F_output(outfile_stdout)
; FileAppend , %outfile_stdout%, *
%--

以上の 2つのファイルを item の中に加え、
startup の中に 1_outfile_runStdOut のフォルダを作り、それが起動時に実行されるようにします。

今回のは、一度ファイルに出力させてそれからその内容を読み込む形にしています。

%A_ScriptDir%\output.txt のファイルを使っています。

outfile_runStdOut が実行されると、 TextRunRun の実行ファイルがあるフォルダ内に output.txt が作られ、一度そのファイルに出力されるようにしています。

outfile_runStdOut  [ コマンド ]

この様に outfile_runStdOut に引数をつけて実行するとそれがコマンドとして実行できます。

outfile_runStdOut を記入する手間を省くため、 テキスト上のキー から実行できる様にします。

hotkeyOnText の中に以下のファイルを追加します。

Alt_w.txt
outfile_runStdOut

以上で完了です。
Alt+W で実行できるようにしています。

テキストにコマンドを入力して、 Alt+W を押せば、コマンドプロンプトと同じ様な感じの処理ができる事を確認できると思います。

dir  /b

これを記入して Alt+W を使ってみると、以下の様になります。

画像

今回の Alt+W を使った場合、 TextRunRun のスクリプトを通して使う訳なので、 # #% % で囲まれた文字を使用する事が出来ます。

copy  readme.txt  #myFolder#

この様に、 アイテム のリンク先を使う事や、 %A_MyDocuments% といった AutoHotkey の組み込み変数も使用できます。
( もちろん、ユーザーが宣言したグローバル変数も使えます。 )

それと、相対パスでファイルを指定する場合は TextRunRun のカレントフォルダが基準になります。

TextRunRun のカレントフォルダは &cd を使って位置を変えます。

おまけ

既に目的どおりのものは出来ているのですが、さらに余計な事も試してみます。

コマンドプロンプト内に出力する

今までは F_output( ) の関数を使って、 蓄え式の説明表示 の中に出力させていました。

これを、コマンドプロンプトの方に出力させる様にしてみます。

TextRunRunテキスト から実行して、コマンドプロンプトの方に出力させるという事です。

AutoHotkey は、コマンドプロンプトから起動させて使用した場合
FileAppend , [Text], *
この処理からコマンドプロンプトで指定の文字が出力できるようです。

これを使って、結局またコマンドプロンプトの方に結果を出力させるようにしてみます。

これを試すには場合により準備が必要だったりします。

今回の処理をうまく動作させるには、 比較的新しい Ahk2Exe でコンパイルした TextRunRun が必要になります。
ソースコード版なら、比較的新しい AutoHotkey で動作させる事が必要です。

古い AutoHotkey の場合、全角文字がうまく出力されないようです。

準備さえ出来ていれば後は簡単です。

先程挙げた outfile_runStdOutアイテム の処理の最後に
; FileAppend , %outfile_stdout%, *
という記述があります。

この部分はコメントアウトしている訳ですが、この部分をコメントにしないようにするだけです。

逆に、1つ上にある
F_output(outfile_stdout)
の行を削除するかコメントアウトしてください。

これで完了です。

コマンドプロンプトなどから起動して使う

さて、使う時ですが TextRunRun を起動する際、コマンドプロンプトから起動させたものを使います。

その際は、
[フォルダのパス]\TextRunRun.exe | more
といった実行のさせ方をする必要があります。

後は先程やってみた事と同じ事をするだけです。
テキスト にコマンドを記入して、 Alt+W を押せばコマンドが実行されて、結果はコマンドプロンプトの方に出力されると思います。

さらにオマケ。 サクラエディタ に出力

エディターの中には、このコマンドプロンプトと同じように 出力として使える機能があるエディターがあるようです。

サクラエディタ で出力ができたのでやり方を挙げておきます。

サクラエディタ のウインドウを開いたら、
上部のツールバーの ツール(T) を選んで 外部コマンドの実行(X) を選びます。

ウインドウが表示されるので、 名前(N) の入力欄に TextRunRun のフルパスを入力して実行させます。
コマンドプロンプトの時のように、
| more は記入しません。

後の項目はよくは分かりませんが、 チェックボックスは 標準出力を得る(S) にだけチェックを入れ、
文字コードは SJIS を選べばよいと思います。

実行のボタンを押して TextRunRun を起動すると サクラエディタ を出力先にできたので興味がある方は試してみてください。