run "foo.bat > con" が動くのは…No.09506
杉浦 まさき さん 01/08/27 23:38
 
こんばんは。杉浦 まさき です。

ちと確認&質問なんですが、
マクロの run コマンドの実行ファイルとして
バッチファイルを指定したい時に、以前は

 run "command.com /C foo.bat > con";

と指定しなければ駄目だったと思うんですが、
今やってみたら

 run "foo.bat > con";

でも行けてしまいました。で、これがうまく行くのは
1)秀丸が実行ファイル名の拡張子を見て
  内部で "command.com /C" を足しているから

なのか、

2)NT/2000 系ではうまく行くだけ(= 9X 系はNG)

なのか、どちらなんでしょうか?


[ ]
RE:09506 run "foo.bat > con" が動くのはNo.09507
ひろ さん 01/08/28 23:03
 
 杉浦さん今日は、ひろです。
>  run "command.com /C foo.bat > con";
 私の環境 Windows98+I.E Ver.5.5 では大丈夫でした。

 ひょっとして start コマンド同様 I.E Ver.4.x 以上が必要という事だった
りして。

[ ]
RE:09506 run "foo.bat > con" が動くのはNo.09508
安久津 さん 01/08/29 05:07
 
こんにちは杉浦さん、安久津です。

> run "foo.bat > con";

私の現在の OS は、WinMe なのですが、以前の Win95 でも、

 run "foo.bat";

はできました。command.com /c は必須ではありません。
#ただし、run "foo.bat >con"; は、やったことなかったので知りません。

>でも行けてしまいました。で、これがうまく行くのは
>1)秀丸が実行ファイル名の拡張子を見て
>  内部で "command.com /C" を足しているから
>
>なのか、
>
>2)NT/2000 系ではうまく行くだけ(= 9X 系はNG)
>
>なのか、どちらなんでしょうか?
秀丸が command.com /c を足しているかは分かりかねますが、
現在の WinMe でも 'command.com /c' 無しで、うまくいきます。
 Win95 の時からのバッチファイル実行マクロ( run を使っている )は、
今も昔も変わりなく動いています。# '>con' はしていませんが。


●テスト
rem a.bat
dir /a-d/on/b
rem end of a.bat

// a.mac
$$bat = macrodir + "\\a.bat";
run "\"" + $$bat + "\" >con";
endmacro;

c:\windows\command\a.txt を開いているウインドウで、
a.mac を実行した。以下、出力。
------------------------------

C:\WINDOWS\COMMAND>dir /a-d/on/b
ADDDRV.EXE
ANSI.SYS
ATTRIB.EXE
<< 省略 >>
XCOPY32.EXE
XCOPY32.MOD

C:\WINDOWS\COMMAND>

[EOF]
------------------------------
なぜか、プロンプトまで取り込まれますが。(^^;

●気になること
NT のバッチファイルの中で、

bar param 2>stderr.log

をやろうとしても、リダイレクトしてくれないという現象がありました。
ところが、

bar param  2>stderr.log

という具合に 'param' と '2>' の間に 2個以上のスペースを置くと、
ちゃんとリダイレクトしてくれました。
#ぜんぜん関係ないか。(^^;

では。

#後ろに '<con >con' 添えるだけでなんでもできるぞ。(^^)ヤッホー。
#run "c:\\cygwin\\bin\\bash --login -c 'sort | uniq -d'  <con >con";

[ ]
RE:09508 run "foo.bat > con" が動くのはNo.09510
ひろ さん 01/08/29 17:20
 
 杉浦さん、安久津さん今日は、ひろです。
> 私の現在の OS は、WinMe なのですが、以前の Win95 でも、
 ちょっと借りて試してみましたが、「> con」を含め Windows98+I.E 5.5
でも出来ました。ただし、
> なぜか、プロンプトまで取り込まれますが。(^^;
とおっしゃるように、プロンプトとコマンドが取り込まれます。これは
「command.com」を付けても同じでした。

> #run "c:\\cygwin\\bin\\bash --login -c 'sort | uniq -d'  <con >con";
 ##cygwin 付属の sort で u オプションを使えば、わざわざ uniq に渡さ
なくても良いのでは? 何か動きが異なるのかな?

[ ]
RE:09510 run "foo.bat > con" が動くのはNo.09511
ながさわ さん 01/08/29 18:18
 
こんにちは、ながさわです。

>> #run "c:\\cygwin\\bin\\bash --login -c 'sort | uniq -d'  <con >con";
> ##cygwin 付属の sort で u オプションを使えば、わざわざ uniq に渡さ
>なくても良いのでは? 何か動きが異なるのかな?

上の場合は同じですね。sortに他のオプションを指定してある場合は違いますが。

[ ]
RE:09506 run &#34;foo.bat &#62; con&#34No.09512
秀丸担当 さん 01/08/29 18:25
 
>1)秀丸が実行ファイル名の拡張子を見て
>  内部で "command.com /C" を足しているから
>
>なのか、
>
>2)NT/2000 系ではうまく行くだけ(= 9X 系はNG)
>
>なのか、どちらなんでしょうか?

秀丸では、"command.com /C"は足していません。
なぜか EXEファイルを実行するのと同じようにBATファイル
を渡すと、Windowsがちゃんとやってくれているようです。

command.com /c が必要なのは、dir や copy などの内部
コマンドに必要です。

[ ]
RE:09512 run &#34;foo.bat &#62; con&#34No.09515
杉浦 まさき さん 01/08/29 22:12
 
このツリーの皆さん、こんばんは。
杉浦 まさき です。

>秀丸では、"command.com /C"は足していません。
>なぜか EXEファイルを実行するのと同じようにBATファイル
>を渡すと、Windowsがちゃんとやってくれているようです。
>command.com /c が必要なのは、dir や copy などの内部
>コマンドに必要です。

話を総合すると、*.bat だけだとNGだった、
というのは僕の勘違いだったようですね(^^;。
お騒がせしましたm(_ _)m。
#Me でコマンドプロンプトが取り込まれる件は
 やぶ蛇でしたけど(^^;。んでもこれって
 OS側の問題なんでしょうねぇ…多分。


[ ]
RE:09511 run "foo.bat > con" が動くのはNo.09516
安久津 さん 01/08/30 06:41
 
こんにちは ひろさん、ながさわさん、安久津です。

>>> #run "c:\\cygwin\\bin\\bash --login -c 'sort | uniq -d'  <con >con";
>> ##cygwin 付属の sort で u オプションを使えば、わざわざ uniq に渡さ
>>なくても良いのでは? 何か動きが異なるのかな?
>
>上の場合は同じですね。sortに他のオプションを指定してある場合は違いますが。
同じじゃないです。(^^;)

$ uniq --help
<< 途中省略 >>
 -d, --repeated    only print duplicate lines
 -u, --unique     only print unique lines

$ seq -w 0 20 >a.txt
$ seq -w 0 18 >b.txt
$ sort -m a.txt b.txt >c.txt   # マージソート
$ sort -u c.txt >sort_u.txt   # 重複行の削除
$ uniq c.txt >uniq.txt      # 重複行の削除
$ uniq -d c.txt >uniq_d.txt   # 重複している行だけ表示
$ uniq -u c.txt >uniq_u.txt   # 重複していない行だけ表示

次のような集合だと、もっと分かりやすい。
 +-- a.txt -+
 |     |
 |  +------+- b.txt -+
 |  |   |     |
 |  |   |     |
 +---+------+     |
   |        |
   +----------------+

では。
# ruby のデーモンプログラム例を実行(プロセス管理)したくて、
# cygwin フルインストールしました。ちょくちょくいじくっていたら、
# のめりこんでしまいました。
#「なにこれ、マジかよ、スゲーじゃん」驚愕三段活用の連発。
# --- 最新の驚きの報告 ---
# xmlparser の domtree や xpath を知ったときよりも、
# sort, uniq, join や awk の組み合わせの方で驚いた。(^^;)温故知新なのか!

[ ]
RE:09515 run &#34;foo.bat &#62; con&#34No.09517
Arimac さん 01/08/30 08:57
 
>#Me でコマンドプロンプトが取り込まれる件は
> やぶ蛇でしたけど(^^;。んでもこれって
> OS側の問題なんでしょうねぇ…多分。

コマンドプロンプトはエラー出力に出力している
筈だけど、秀丸エディタでは何時かエラー出力も
取り込まれるように変わったような気が・・・(^^;

[ ]
RE:09517 run &#34;foo.bat &#62; con&#34No.09519
TAKA さん 01/08/30 12:11
 
TAKA です。

>コマンドプロンプトはエラー出力に出力している
>筈だけど、秀丸エディタでは何時かエラー出力も
>取り込まれるように変わったような気が・・・(^^;

「その他→動作環境→編集→高度な編集」の「プログラム実行で標
準エラー出力も出力する」がONになっているためではないでしょ
うか?
OFFにすれば出力されないようになると思います。
このオプションは、ヘルプによるとV3.02かV3.03で追加されたよう
です。(デフォルトはONのようです)

[ ]
RE:09519 run &#34;foo.bat &#62; con&#34No.09531
杉浦 まさき さん 01/08/31 23:56
 
Arimac さん、TAKA さん、こんばんは。
杉浦 まさき です。

>>コマンドプロンプトはエラー出力に出力している
>>筈だけど、秀丸エディタでは何時かエラー出力も
>>取り込まれるように変わったような気が・・・(^^;
>「その他→動作環境→編集→高度な編集」の「プログラム実行で標
>準エラー出力も出力する」がONになっているためではないでしょ
>うか?
>OFFにすれば出力されないようになると思います。

エラー出力ONの状態で

command.com /c dir > con

の結果にコマンドプロンプトが含まれているでしょうか?
#NT4.0 上で cmd.exe で同じことをすると
 コマンドプロンプトは含まれていませんでしたが…??


[ ]
RE:09531 run &#34;foo.bat &#62; con&#34No.09537
TAKA さん 01/09/01 11:47
 
どもっ、TAKA です。

>>>コマンドプロンプトはエラー出力に出力している
>>>筈だけど、秀丸エディタでは何時かエラー出力も
>>>取り込まれるように変わったような気が・・・(^^;
>>「その他→動作環境→編集→高度な編集」の「プログラム実行で標
>>準エラー出力も出力する」がONになっているためではないでしょ
>>うか?
>>OFFにすれば出力されないようになると思います。
>
>エラー出力ONの状態で
>
>command.com /c dir > con
>
>の結果にコマンドプロンプトが含まれているでしょうか?
>#NT4.0 上で cmd.exe で同じことをすると
> コマンドプロンプトは含まれていませんでしたが…??

私は、エラー出力に関しては、環境設定で出力したり出力しなかっ
たりが出来ますよということが言いたかっただけです。
コマンドプロンプトについては分かりかねます。

ちなみに、私の環境(Windows 2000+秀丸 3.08)で、以下のマクロを
動作させたところ、
// テストマクロ(ここから)
//  run "command.com /C dir C:\\*.* > con";
    run "cmd.exe /C dir C:\\*.* > con";     // 2000
// テストマクロ(ここまで)

「プログラム実行で標準エラー出力も出力する」がONであっても
OFFであっても出力結果は以下のようになりました。
// 出力結果(ここから)
 Volume in drive C has no label.
 Volume Serial Number is A044-54D7

 Directory of C:\

2001/08/08  13:16       <DIR>          WINNT
2001/08/08  13:19       <DIR>          Documents and Settings
2001/08/08  13:21       <DIR>          Program Files
2001/08/10  13:49       <DIR>          Windows Update Setup Files
2001/08/08  14:58                1,909 mpcsetup.log
               1 File(s)          1,909 bytes
               4 Dir(s)   2,122,293,248 bytes free
// 出力結果(ここまで)

なんとなくですが、杉浦さんとArimacさん、それぞれの「コマンド
プロンプト」の定義が異なっているような気がしてきました。
杉浦さんの方は、コマンドラインにある「C:\>」の部分を言われて
いるのでは?
Arimacさんの方は、想像がつきませんでした。

[ ]
RE:09537 run &#34;foo.bat &#62; con&#34No.09540
Arimac さん 01/09/01 14:37
 
command.comやcmd.exeの引数で指定したコマンドの
実行にはコマンドプロンプトは出ないと思います。
(必要ないし)

command.comとcmd.exeは呼び出し元のプログラムから
渡された標準エラー出力を使わずに、直接コンソールに
出力してるのではないかという気がします。
そのためコマンドプロンプトも取り込まれるのだと思います。
(だとすると前回の私の見解は間違っていますね(^^;)

[ ]
RE:09531 run &#34;foo.bat &#62; con&#34No.09543
安久津 さん 01/09/01 19:00
 
こんにちは杉浦さん、安久津です。
 OS は WinMe 4.90.3000 です。
秀丸は 3.05 です。

>エラー出力ONの状態で
>
>command.com /c dir > con
>
>の結果にコマンドプロンプトが含まれているでしょうか?
「その他(O)」->「プログラム実行(X)」でも、
マクロからの run "command.com /c dir > con"; でも、
含まれませんでした。
では。

[ ]
RE:09540 run &#34;foo.bat &#62; con&#34No.09555
杉浦 まさき さん 01/09/02 00:19
 
ども、杉浦 です。

>command.comやcmd.exeの引数で指定したコマンドの
>実行にはコマンドプロンプトは出ないと思います。
>(必要ないし)

こちらの方は言われてみれば確かにそうですね(^^;。

で、前回 Me だけ…という書き方をしましたが、
NT でも bat ファイルを実行した場合
やっぱり出力にコマンドプロンプト(C:\> みたいな奴)が
でてました。ちゃんと確認してなくてすみません。
#てことは…bat ファイルの実行中、cmd.exe や
 command.com は bat ファイル中のコマンドを実行するたびに
 いちいちエラー出力にプロンプトを
 出してるってことですかぁ…??何か変ですけど。

[ ]
RE:09555 run &#34;foo.bat &#62; con&#34No.09559
Arimac さん 01/09/02 01:06
 
>#てことは…bat ファイルの実行中、cmd.exe や
> command.com は bat ファイル中のコマンドを実行するたびに
> いちいちエラー出力にプロンプトを
> 出してるってことですかぁ…??何か変ですけど。

確かunixだと対話モードでないとプロンプトは
出なかったような気がしますが、dosだとプロンプトが
出てきてうっとうしいのでECHO OFFにするのが
普通のような・・・(^^;

[ ]
RE:09559 run &#34;foo.bat &#62; con&#34No.09569
杉浦 まさき さん 01/09/02 23:16
 
ども、杉浦 です。

>確かunixだと対話モードでないとプロンプトは
>出なかったような気がしますが、dosだとプロンプトが
>出てきてうっとうしいのでECHO OFFにするのが
>普通のような・・・(^^;

おお! ECHO OFF !! そんなもんがありましたね(^^;。
てことは別に何もおかしくない、ということですか…。
またまたお騒がせしました〜m(_ _)m。>ALL

[ ]