(3344)
3344:
SD,CF,ATA ベンチマーク
投稿者:
文太
2008/10/23(木) 00:13
コメント数 1
別スレッドにて失礼します。最後にお願いがありますので、心当たりのある
方は、よろしく。m(__)m
以下、ベクタにあるディスク読み出し・書き込みベンチ計測ソフトBT.exe
の結果です。大容量メモリをPDAで使用中に、どれくらい重くなるのか、
というこが数字で知りたい(体感で納得できない)場合に有効かと思います。
すべてモバでの計測です。
---512MB microSD---
A:\>BT 1024
Write 519.80 KBytes/Sec
Write 930.91 KBytes/Sec
Write 930.91 KBytes/Sec
平均 Write 736.69 KBytes/Sec
Read 239.25 KBytes/Sec
Read 239.25 KBytes/Sec
Read 242.08 KBytes/Sec
平均 Read 240.19 KBytes/Sec
---512MB CF---
A:\>BT 1024
Write 691.89 KBytes/Sec
Write 1034.34 KBytes/Sec
Write 1044.90 KBytes/Sec
平均 Write 890.43 KBytes/Sec
Read 265.97 KBytes/Sec
Read 265.97 KBytes/Sec
Read 262.56 KBytes/Sec
平均 Read 264.83 KBytes/Sec
---20MB ATA Flash---
A:\>BT 1024
Write 255.36 KBytes/Sec
Write 227.56 KBytes/Sec
Write 224.56 KBytes/Sec
平均 Write 235.04 KBytes/Sec
Read 211.57 KBytes/Sec
Read 212.01 KBytes/Sec
Read 212.01 KBytes/Sec
平均 Read 211.86 KBytes/Sec
---16MB Canon ---
A:\>BT 1024
Write 716.08 KBytes/Sec
Write 775.76 KBytes/Sec
Write 691.89 KBytes/Sec
平均 Write 726.24 KBytes/Sec
Read 244.98 KBytes/Sec
Read 245.56 KBytes/Sec
Read 248.54 KBytes/Sec
平均 Read 246.35 KBytes/Sec
---32MB Hagiwara---
A:\>BT 1024
Write 846.28 KBytes/Sec
Write 846.28 KBytes/Sec
Write 853.33 KBytes/Sec
平均 Write 848.62 KBytes/Sec
Read 255.36 KBytes/Sec
Read 255.36 KBytes/Sec
Read 255.36 KBytes/Sec
平均 Read 255.36 KBytes/Sec
=================================================
512SD 512CF 20ATA 16Canon 32Hagi
Write 736.69 890.43 235.04 726.24 848.62
Read 240.19 264.83 211.86 246.35 255.36
=================================================
書き出し(体感で目立つ)で、20MBが長い間愛されていた理由が分かりま
した。 読み出し(辞書引き)ではほとんど変わらないと言えますね。 やっぱり
microSD がかなり速かったようです。Vzでは、UFオプションで鬼金! イェイ!
【お願い】実は、僕はメモリへのアクセス・スピードを知りたくてこのソフト
に辿り着いたのではないのです。だって、知っても諦めるしかないですから(ベ
ンチマークって、基本的にそういうものだとは思うのですが)。
僕が本当にやりたかったのは、実行ファイルの速度測定です。
たとえばこんな具合に。
>Here are my timings on gcc's source code,
>
>Both sed-only scripts: 4.3 sec
>sed+cat: 3.6 sec
>only sed /abc/i: 3.5 sec
>only cat -s: 0.1 sec
これは某所で僕が sed スクリプト添削以来をしたときに達人さんたちが(僕
をのけにして−−盛り上がっていただければ、そして添削していただければ依存
なしです、はい)していた会話の一部なのですが、スクリプトや実行ファイルの
測定結果です。
これをDosでやりたいのですが、可能にしてくれるソフトってないでしょう
か。ベクターであたったのですが、どうもそれっぽいのがなくて。因みに上記は
UNIX での話のはずです。時間を計るのに使ったソフトは、もう前提になってる会
話のようでした。
- No.3344 -
このTreeへ
[リストへもどる]
pre
(3344)
3345:
Re: SD,CF,ATA ベンチマーク
投稿者:
としき
2008/10/23(木) 15:39
参照先:http://toshiki.la.coocan.jp/
3344 番 文太 さんへのコメント コメント数 1
> すべてモバでの計測です。
前に、カードスロットの性能によって速度が変わる、という話がありましたよね。
最新のWindowsマシンで計測すると、もしかしたら大幅に異なった結果が出るかも
しれません。
> 書き出し(体感で目立つ)で、20MBが長い間愛されていた理由が分かりま
ごめんなさい、私にはこの数字からだけでは、20MBが愛された理由がわかり
ません。何か、他のファクターがあるのでしょうか?
> 僕が本当にやりたかったのは、実行ファイルの速度測定です。
いわゆる、プロファイラ、と呼ばれる種類のソフトを使います。
名著「ソフトウェア作法」では、profileに対して思いっきり素直に「輪郭」とい
う訳語が使われていて、これには馴染めませんでしたが、ま、そういうものです。
unixでは、メジャーかどうかは知りませんが、timexというコマンドを使えば測定
できる、という話を聞いたことがあります。もしかしたら、OSに標準で付いて
いるのかもしれません。
実行ファイル内部の関数毎の細かい数字が欲しいというのであれば別ですけど、
あるツールをある条件で動かした場合の速度を計る、というのであれば、簡単
にバッチファイルで
time
foo.exe > temp.$$$
time
というものを作れば十分に用が足りると思います。
もし、1回の実行速度が速すぎる、というのであれば、for でも使って100回
ループとか作ってやればよろしいでしょう。
自作のマクロやスクリプトの場合は、測定したいブロック毎に時間関係の出力ル
ーチンを組み込んでやれば、たとえばサブルーチン毎の測定も可能。具体例では
ないのですが、nifty:FGALDC/MES/15/#18233 前後で、誤ってこの関係のルーチン
を組み込んだままのマクロを提示しているのに、その内容の説明をサボってしま
っておしかりを受けている、なんていうシーンがありましたね。
- No.3345 -
このTreeへ
コメント元:3344 へ
[リストへもどる]
pre
(3344)
3346:
Re^2: SD,CF,ATA ベンチマーク
投稿者:
文太
2008/10/23(木) 17:40
3345 番 としき さんへのコメント コメント数 2
としきさん
いつも、いつも知らないことを教えていただき感謝です。m(__)m
> 前に、カードスロットの性能によって速度が変わる、という話がありましたよね。
> 最新のWindowsマシンで計測すると、もしかしたら大幅に異なった結果が出るかも
> しれません。
純粋に(?)カードの性能を知ろうというのであれば、違う条件でやると違う
結果が出て、よりデータが増えて…。
なのですが、これらのカードはモバでしか使わないので、これはまあまあとい
うことで。
> ごめんなさい、私にはこの数字からだけでは、20MBが愛された理由がわかり
> ません。何か、他のファクターがあるのでしょうか?
>> =================================================
>> 512SD 512CF 20ATA 16Canon 32Hagi
>> W 736.69 890.43 235.04 726.24 848.62
>> R 240.19 264.83 211.86 246.35 255.36
>> =================================================
>> 書き出し(体感で目立つ)で、20MBが長い間愛されていた理由が分かりま
>> した。
思いっきし間違ってますね。ご指摘ありがとうございました。
遅いんだ。テクノロジーの進歩に感謝。愛されていた(誤解されていた)理由
は、使い方ですね。ログ、辞書などのでかいファイルを入れることをまったくし
なかった=できなかったゆえの、使い方の違いだったんだ。辞書検索の遅さが僕
をワープロ的電子辞書に走らせました。検索結果をファイルに残すという向学心
がないとも言う…(これは嘘)。
> いわゆる、プロファイラ、と呼ばれる種類のソフトを使います。
了解。
> 名著「ソフトウェア作法」では、profileに対して思いっきり素直に「輪郭」とい
> う訳語が使われていて、これには馴染めませんでしたが、ま、そういうものです。
そういうものなのですかね。術語なんだから「プロファイラ」(profiler ??)と
でもしておけばいいのに。 そういえば大昔、EMSがらみで(DMPI だったかな?)
"paging"という単語が分からにゃい(文太)というのに、懐かしきDANNYさんと
としきさんに教えてもらいましたよね。m(__)m 術語は所詮意味が分からなければ
通じない、という話でした。それでも「輪郭」では余計に分からない…。
> time
> foo.exe > temp.$$$
> time
これなんですが、
C:\>Command.com /cType toshi.bat
Command.com /cTime
Addtail2.exe <testk.log > temp.$$$
Command.com /cTime
C:\>Command.com /cType ss.bat
Command.com /cTime
Sed "" testk.log > temp.$$$
Command.com /cTime (注)
というので計測してみようと思ったわけです。(意地悪?)
なのですが、
C:\>Toshi
現在の時刻は 17:13:43.89 です.
時刻を入力してください: #ここでリターンを押すまでが
#計測に入ってしまいますよね。
C:\>Addtail2.exe <testk.log > temp.$$$
現在の時刻は 17:13:46.31 です.
時刻を入力してください:
このバッチではうまくないですよね。
(参考)
------------------------------------------------
C:\>time /?
システム時刻を表示または設定します。
TIME [/T | 時刻]
パラメータの指定がなければ、現在の設定が表示され、新しい時刻を入力できる
プロンプトになります。変更しない場合は、Enter キーを押してください。
コマンド拡張機能を有効にすると、TIME コマンドは、/T スイッチを
サポートするようになります。このスイッチを指定すると、現在の時刻
だけが表示され、新しい時刻を入力するためのプロンプトは表示されません。
C:\>time /T
17:22 #おい、単位が大雑把すぎるよ。
------------------------------------------------
専用ソフトを探すしかありませんか? 知りませんか?
Profiler 3.00は、パスカルのソースそのまんまでした。
(注)あのあたりでVzのメモアロが出るみたい。再現できたら報告を
試みます。やだなぁ。
F03がぐちゃぐちゃになってる???
念のためのvmap。どっかが変になってませんか>konnoさん?
0220 sys 1 3296 <config>
02EF sys 1 176 emm 67
02FB sys 1 1248 himem
034A sys 1 352 atok8a
0361 sys 1 13984 atok8b 10 16 60 CF D8 DE
06CC sys 5 17664 <config>
0B21 <-- 1 3856 command 2E
0C13 1 112 <free>
0C1B 0B21 1 5088 command (env)
0D5A <-- 1 34720 dosx C4 FE
15D5 <-- 1 48 vkeyc 15
15D9 1A35 2 1376 command (env)
1631 <-- 1 1648 vwx 1.08b -z2 -l6144 -x1
1699 <-- 1 3120 pansi
175D <-- 1 3888 vz 1.60Q -z 1B 21 29
1851 1A35 1 1408 command EA
18AA <-- 1 6304 kb16 JP,932,C:\WINDOWS\sy 09 2F
1A35 <-- 1 3856 command 22 23 24
1B27 <-- 1 128704 キ 1.60Q -z E1 E5 E7 E9
3A94-9FFF 1 415392 <free>
- No.3346 -
このTreeへ
コメント元:3345 へ
[リストへもどる]
pre
(3344)
3347:
Re^3: SD,CF,ATA ベンチマーク
投稿者:
konno
2008/10/23(木) 23:12
3346 番 文太 さんへのコメント コメント数 1
> このバッチではうまくないですよね。
たとえば、cr というファイルを作って、中身は、\n つまり、改行1個とします。
それをPATHの通ったところにおいて、BATのなかで、
TIME < CR
と指定すれば所定の結果を得られるでしょう。
COMMAND /C TIME
というように、COMMAND.COMをXPでの常駐VZで呼ぶとメモアロエラーになってしまう
と思います。
- No.3347 -
このTreeへ
コメント元:3346 へ
[リストへもどる]
pre
(3344)
3348:
Re^4: SD,CF,ATA ベンチマーク
投稿者:
文太
2008/10/23(木) 23:42
3347 番 konno さんへのコメント コメント数 1
konnoさん、即レスありがとうございました。うれじい。(T-T)
> たとえば、cr というファイルを作って、中身は、\n つまり、改行1個とします。
> それをPATHの通ったところにおいて、BATのなかで、
> TIME < CR
> と指定すれば所定の結果を得られるでしょう。
こんなことができるんですね。DosというかDos窓も捨てたものじゃない。
ヒデキ、感激ぃ〜。
> COMMAND /C TIME
> というように、COMMAND.COMをXPでの常駐VZで呼ぶとメモアロエラーになってしまう
> と思います。
常識なの? いえ、たぶんご想像のとおり、command.com /c はVzでコンソ
ールを取るために必要な処理で、実用的には、これらは素直に cmd.exe にやっ
てもらっても不都合はないのです。でもねぇ。こんな風におさわがせしてるとき
しか真剣にVz(その他)研究をしない人なので、報告・実況中継したいわけな
のですよ…。
でも、vz.defのエイリアスに
#if XP
t Command.com /cType %1
d Command.com /cDir %1
#endif
なんて入れてしばらくになるのに(2年くらい)、あんなに分かりやすいメモ
アロは出なかったなぁ? 小文字の「command.co /ctime」だと違いますでしょ
うか。大文字にして見やすくしたのは最近なのですが。
とにかく、例のtoshi.bat(としきさん作成改行付加addtail2.exe使用)と
ss.bat(sed使用)では、じゃーん、
toshi.bat 0.28秒
ss.bat 0.49秒
という結果でした。 やっぱ実行ファイルなんだ。行単位で読み込む sed の方
が速いだろうと思ったのだけど。
くやしいなぁと、 sed で「最終行」を指定する「$」を使ったスクリプトを今
考えましたが、駄目ですね。パターンスペースに改行がないのだから、判定不能
だ。負けた。
因みにtestk.logという対象ファイルは、
TESTK LOG 3030620 08-10-23 17:07
というサイズの金野さんのところのログでした(ちょっと古い)。 「来て来て、
konnoヘルプ」な呪文が見事に効いてしまったみたい。うふ。ありがとうございま
した。m(__)m
よし、これでスクリプトの速度が測れるぞ! \(^_^)/
- No.3348 -
このTreeへ
コメント元:3347 へ
[リストへもどる]
pre
(3344)
3355:
Re^5: SD,CF,ATA ベンチマーク
投稿者:
konno
2008/10/25(土) 01:16
3348 番 文太 さんへのコメント コメント数 1
> なんて入れてしばらくになるのに(2年くらい)、あんなに分かりやすいメモ
> アロは出なかったなぁ? 小文字の「command.co /ctime」だと違いますでしょ
> うか。大文字にして見やすくしたのは最近なのですが。
常駐VZでSW3の場合、大文字でCOMMAND.COMを呼ぶと、VZの領域が分断されるようで、
すぐにメモアロエラーになることがあるようです。こういう場合はかえって小文字
のほうがいいでしょう。
XPがSP3になってから、COMMAND.COMとVZの相性がさらに悪化したような気がします。
気のせいかもしれませんが。でもVistaよりはまだましか。
> toshi.bat 0.28秒
> ss.bat 0.49秒
この1/100秒台の桁はあてにならないようです。time コマンドを連続実行させると
一定にならず、バラバラになりますね。
標準コマンドで使えるのがもう一つありました。実は最初にこれを思いついたの
ですが、使い勝手が悪そうだったので、パスしてました。(^^; BATで、
PROMPT $t $g
echo >nul
実行コマンド
echo >nul
こんなのはどうでしょう。元に戻すのは、
PROMPT $p$g
かな。
- No.3355 -
このTreeへ
コメント元:3348 へ
[リストへもどる]
pre
(3344)
3356:
Re^6: SD,CF,ATA ベンチマーク
投稿者:
文太
2008/10/25(土) 11:51
3355 番 konno さんへのコメント コメント数 2
konnoさん
なるほどプロンプトの時間を使うのですね。そっちならさすがにコンソール
参照できるなぁ…。
メモアロな件、ありがとうございました。そうか、sw4 が推奨なんですよね。
> ■ スワップモード「SW4」
> -----------------------------
> 従来、「SW3」で常駐した時、SYMDEB.EXEを起動すると、SYMDEBの管理メモリの
> 先頭部に、VZ.COMをロードしてしまいました。
> オプション「SW4」を指定すると、アプリケーション上のコマンドラインのフックを
> 抑止しますので、この不具合を解消できます。
(vz1.6\readme.docより)
「よしsymdeb!」な頃に一度「SW4の山彦文太」になったはずだったのに、
なぜかsw3になってました。???
ま、command /cは、小文字にしておきます。m(__)m
> XPがSP3になってから、COMMAND.COMとVZの相性がさらに悪化したような気がします。
> 気のせいかもしれませんが。でもVistaよりはまだましか。
「気のせい」と仰っているので特定できないのでしょうが、どんな感じででし
ょうか。「こんな感じ」程度お教えいただけれと、注意が向いて「ほんとだ」と
か「そうでもないみたい」と認識できる可能性が高まるのですけれど。
------------------------------------------------------------------------
はい、100回回しました。やっぱりaddtail2.exe(by としき)使用の
toshiki.batの勝利。
たぶん、このFORの使い方はXPでしかできないでしょう。(バッチからなので
setと違い−−やば−−、cmd的なforが使われてくれた模様。/l オプション)
純Dosだと
for %%I in (1,1,1,1,1)
みたくして、5回回す、(1,1,1)で3回回す、ってやり方しかないものなのかしら?
C:\>command.com /ctype toshi.bat
ver |time
@echo off
for /l %%I in (1,1,100) do addtail2 <TESTK.LOG >temp.$$$
@echo on
ver |time
C:\>command.com /ctype ss.bat
ver |time
@echo off
for /l %%I in (1,1,100) do Sed "" testk.log > temp.$$$
@echo on
ver |time
C:\>command.com /ctype sss.bat #serow版sed使用
ver |time
@echo off
for /l %%I in (1,1,100) do Oldsed "" testk.log > temp.$$$
@echo on
ver |time
toshi.bat 30.28秒
ss.bat 51.11秒
sss.bat 37.72秒 (表現力の弱さはあるが、やはりserow版は速い)
メモアロが恐くて(感謝> konno さん)、しょうがないから cmd.exe に ver,
time を頼んだのですが、そうすると、実況中継が出来なくて面白くない。
だいたい画面から数字を紙に書き出して手で計算するなんて、「ださださじゃ
ないかぁー+」(c)Taku Shimura って気は大いにする。
- No.3356 -
このTreeへ
コメント元:3355 へ
[リストへもどる]
pre
(3344)
3359:
Re^7: SD,CF,ATA ベンチマーク
投稿者:
文太
2008/10/25(土) 23:56
3356 番 文太 さんへのコメント コメント数 1
夜中までしつこい奴です、まったく >文太。
でも、ちっ、情けない、と比較的つよく思っていたのですね。
> だいたい画面から数字を紙に書き出して手で計算するなんて、「ださださじゃ
> ないかぁー+」(c)Taku Shimura って気は大いにする。
ださださを解消して、以下のようなバッチ(awkスクリプト呼び出しを含む)で、
割と汎用的に時間の計測ができます。これで、UNIXなtimexに対抗(おいおい)できる
環境にはなったわけです。イエイ!
自分のためなのですが、カスタマイズ箇所のコメントを多めに入れてあります。
追伸。(もちろん誰も興味ないのですが)前回のsed versionは無意味でした。
標準DOS用GNU sedでは、最終行の改行追加ができないからです。
追伸2:割と偏愛しているlogos版は、やはりserow版より100回回して10秒弱
遅いですね。
--- toshi2.bat ---
@echo off
REM 全てルートディレクトリで処理・通信されるという前提
REM Lsed == Logos sed
ver |time >kek
rem Customize: COMMAND to be repeated follows 'do' below, customize!
rem 100 can be easily and conveniently changed to 50 for instance.
for /l %%I in (1,1,100) do addtail2 <TESTK.LOG >temp.$$$
ver |time >>kek
rem 掲示板用:パイプの後は繋げてください。
Lsed "/^現在の時刻/!d" kek | Lsed "s/^[^:]*:[^:]*://; s/ です.$//" |
Jgawk -f pst_time.awk
@echo on
------------------
# pst_time.awk (passed time awk == measure 'process time' by awk)
# Don't use this at 11:55 PM or later; wait until the new day begins ;-)
#input format (1st line; starttime : 2nd line; endtime), like below
#13:09.50
#13:53.43
BEGIN { FS="[:.]"; }
NR == 1 { m=$1; s=$2; ss=$3; }
NR == 2 { m=$1-m; s=$2-s; ss=$3-ss;
if (ss < 0) { ss+=100; s--; }
if (s < 0) { s+=60; m--; }
}
END { if (m==0) { printf "%d.%d秒",s,ss }
else { printf "%d分%d.%d秒",m,s,ss }
}
------------------
- No.3359 -
このTreeへ
コメント元:3356 へ
[リストへもどる]
pre
(3344)
3361:
こっそり差し替え(pst_time.awkなど)
投稿者:
文太
2008/10/26(日) 11:54
3359 番 文太 さんへのコメント コメント数 2
--- toshi2.bat ---
@echo off
REM FORコマンドゆえXP用。Dos用なら根性でFORをネストする(>_<)
REM 全てルートディレクトリで処理・通信されるという前提
REM Lsed == Logos sed
ver |time >kek
rem Customize: COMMAND to be repeated follows 'do' below, customize!
rem 50 can be easily and conveniently changed to 30 for instance.
for /l %%I in (1,1,50) do addtail2 <TESTK.LOG >temp.$$$
ver |time >>kek
Lsed "/^新しい時刻/d; s/^[^:]*:[^:]*://; s/ です.$//" kek | Jgawk -f pst_time.awk
@echo on
------------------------------------------
# pst_time.awk (passed time awk == measure 'process time' by awk)
# measure time max: 59 minutes. 深夜24時をまたがないこと。
#input format (1st line; starttime : 2nd line; endtime), like below
#13:09.50
#13:53.43
BEGIN { FS="[:.]"; }
NR == 1 { m=$1; s=$2; ss=$3; }
NR == 2 { m=$1-m; s=$2-s; ss=$3-ss;
if (ss < 0) { ss+=100; s--; }
if (s < 0) { s+=60; m--; }
if (m < 0) { m+=60; }
}
END { if (m==0) { printf "%02d.%02d秒",s,ss }
else { printf "%02d分%02d.%02d秒",m,s,ss }
}
------------------------------------------
50回回しを10回やってみた結果。1〜2秒の誤差があり、50回ぐらいは
回してやり、それを10回程度やって平均をとる必要がある模様。平均をとる
スクリプトはさすがに書きません。
遅いawkでも10秒実行時間を短縮するより、2時間の開発時間が15分で済
むよう自分の頭を鍛えるほうが先決。XPもバッチもawkも責めてはいけない>自分。
事実、バッチ、スクリプトをいじっている2時間は楽しく、下で待たされていた
15秒、20秒の長かったこと、長かったこと。「き、機械に使われている…。
ださださじゃないかー」と。楽しい人生、これが大切。
C:\>toshi2 # addtail2.exe used
15.42秒
C:\>toshi2
14.83秒
C:\>toshi2
14.76秒
C:\>toshi2
15.44秒
C:\>toshi2
14.73秒
C:\>toshi2
14.89秒
C:\>toshi2
14.55秒 -
C:\>toshi2
14.84秒
C:\>toshi2
15.42秒
C:\>toshi2
15.57秒 +
C:\>ss2 #serow's sed used
18.94秒
C:\>ss2
19.20秒
C:\>ss2
19.00秒
C:\>ss2
19.27秒
C:\>ss2
19.16秒
C:\>ss2
20.72秒 +
C:\>ss2
18.56秒 -
C:\>ss2
20.06秒
C:\>ss2
18.99秒
C:\>ss2
18.70秒
- No.3361 -
このTreeへ
コメント元:3359 へ
[リストへもどる]
pre
(3344)
3367:
FORのネスト付加@DOS
投稿者:
文太
2008/10/27(月) 17:51
3361 番 文太 さんへのコメント コメント数 1
ちょいとお疲れのご様子で、メモ・モード。
> REM FORコマンドゆえXP用。Dos用なら根性でFORをネストする(>_<)
>for %I IN (1,1) do for %%I IN (1,1) echo aaa
で2*2で4回になるね、というつもりだったのですが、これ、純Dosでは
駄目でした。丁寧に「入れ子にできません」「cannot nest for」と教えて
くれました。XP(cmd.exe)では上記のように繰り返されるCOMMANDの部分
をバッチのように扱い「%%I」とするといけます。
純Dosではたぶんコマンドラインの長さの制限までいけるのじゃないか
な、という感触(実験してません)。36回まで回ることを確認しました。
IN (0,1,2,...9,a,b,...z)のようにして。
- No.3367 -
このTreeへ
コメント元:3361 へ
[リストへもどる]
pre
(3344)
3368:
Re: FORのネスト付加@DOS
投稿者:
としき
2008/10/27(月) 23:10
参照先:http://toshiki.la.coocan.jp/
3367 番 文太 さんへのコメント
> ちょいとお疲れのご様子で、メモ・モード。
ご苦労様です。
できれば、重要な部分だけ抜き出して引用してほしかった、と思いつつ、でも、
全部重要なのかも。
さて。
> で2*2で4回になるね、というつもりだったのですが、これ、純Dosでは
> 駄目でした。丁寧に「入れ子にできません」「cannot nest for」と教えて
そういえばそんな制限があったような。すっかり忘れていました。
かつて、この制限を突破するために何をやったかというと、再帰。
いやぁ、今見ると、ものすごい事をやったなぁ、と我ながら驚いてしまう。
具体例はこちら。
http://toshiki.la.coocan.jp/nifty/fgalts/mes12/02907.txt
> 純Dosではたぶんコマンドラインの長さの制限までいけるのじゃないか
> な、という感触(実験してません)。36回まで回ることを確認しました。
例えば、100個のファイルがあるディレクトリをカレントにして、
for %%i in (*.*) do echo aaa
とやってやれば、きっちり100回繰返してくれます。しないけど。
- No.3368 -
このTreeへ
コメント元:3367 へ
[リストへもどる]
pre
(3344)
3370:
pst_tm3.awk +@
投稿者:
文太
2008/10/28(火) 22:18
3361 番 文太 さんへのコメント コメント数 1
すいません、一人遊びです。お疲れなのです。グロンサンなのです。
ディスク・アクセスは時間がいっぱいかかる。じゃ、パイプを排除するのが一
番。というわけで、sed を止めて、awk だけに処理してもらうことにした。
---toshi3.bat---
@echo off
REM FORコマンド /l ゆえXP用。Dos用なら根性でFORを回せ。
REM 全てルートディレクトリで処理・通信されるという前提
ver |time >kek
rem Customize: COMMAND to be repeated follows 'do' below, customize!
rem 50 can be easily and conveniently changed to 30 for instance.
for /l %%I in (1,1,50) do addtail2 <TESTK.LOG >temp.$$$
ver |time >>kek
Jgawk -f pst_tm3.awk kek
@echo on
----------------
---pst_tm3.awk
# pst_time.awk (passed time awk == measure 'process time' by awk)
# measure time max: 59 minutes. 深夜24時をまたがないこと。
#input: ver |time >kek; foo exe; ver |time >>kekのファイル
BEGIN { FS="[:.]"; }
{
m=$3; s=$4; ss=$5;
getline;
getline;
m=$3-m; s=$4-s; ss=$5-ss;
if (ss < 0) { ss+=100; s--; }
if (s < 0) { s+=60; m--; }
if (m < 0) { m+=60; }
exit
}
END { if (m==0) { printf "%02d.%02d秒",s,ss }
else { printf "%02d分%02d.%02d秒",m,s,ss }
}
----------------
【結果】
toshi2.bat (average)
15.04秒
toshi3.bat (average)
15.14秒
測定誤差の範囲内ですね、とほほ。 つまんない。awk、お前はそんなに遅いの
か。
といいつつ、おお、awk スクリプトは進化したじゃない、と喜んでいるのです、
実は。でも、やっぱり、awkのほうがsedより、色々楽ですねぇ。
としきさんの意図は読めました。 環境変数がうまく使えるなら「>」も「>>」
も awk スクリプトの中だけでできるじゃない、ディスクアクセスなくなるじゃ
ない、って感じでしょうか。でも、ほんと? って感じ。setやcmdのお勉強、ひ
いては、cmd.exe環境とcommand.com環境のお勉強は、ま、いつかねぇ…。
個人メモ(忘れないと思うけど):dirコマンドもXPでは拡張されてます。
どっかに、ファイルサイズの「,」を一生懸命削除してるsedスクリプトがありま
したけれど、>Dir /-C とすれば、桁区切り,が出力されません。Dos6.2にこの
オプションはありませんので、XPなら、です。W95以降は分かりません。
さすがにXP以外のWindows稼働マシンは押入れ以外にないです。
追伸:としきさん、timex.exe作りませんか? なんでないの? ないほど
Dosを使っているかぎりまともな結果が出ないんだろうな、と今では想像して
おりますが、そもそも、そんなのあるだろうと思ってた。でも、izgrepの「iz」
さんとか、ちゃんと実行ファイルのベンチマークとってるのですけどねぇ???
何でやってたんでしょう? 「ver |time」なバッチ、なのか…。
- No.3370 -
このTreeへ
コメント元:3361 へ
[リストへもどる]
pre
(3344)
3372:
Re: pst_tm3.awk +@
投稿者:
文太
2008/10/29(水) 20:31
3370 番 文太 さんへのコメント コメント数 2
ふらふらと。
ファンクション・コールって2秒ずつってのは僕の聞き間違いでしたね(何の
話だったんだ?)ちゃんと(いちおう)1/100 まで返してくれるのですね。
=== Macro Tmp by Bunta ===;
* Macro
80 ^^"GET SYSTEM TIME"
ax=$2c00,&i($21)
&m("%02d:%02d:%02d.%02d",cx>>8,cx&$FF,dx>>8,dx&$FF)
*
--- interrup.lst ---
INT 21 - DOS 1+ - GET SYSTEM TIME
AH = 2Ch
Return: CH = hour
CL = minute
DH = second
DL = 1/100 seconds
Note: on most systems, the resolution of the system clock is about 5/100sec,
so returned times generally do not increment by 1
on some systems, DL may always return 00h
--------------------
おお、できるじゃん。
じゃ、というわけで、ナツメ社の『システムコール・ハンドブック』です。
--- timeb.asm ---
;p.148 をちょっとだけ改変
INCLUDE STDIO.H
GETTIME MACRO
mov ah,2ch
int 21h
ENDM
pmain
gettime
hex_bcd ch,TIME
hex_bcd cl,MINUTE
hex_bcd dh,SECOND
hex_bcd dl,MSECOND
print TIME
retms
TIME db ?,?,':'
MINUTE db ?,?,':'
SECOND db ?,?,'.'
MSECOND db ?,?,CR,LF,'$'
pend
-----------------
大昔(makedir.asmな頃)に書いておいたSTDIO.Hは以下。これがなかったら
やりませんでした。マクロ、偉大。(アセンブルするとき、下も同じディレクトリ
に入れておいてね。)
--- STDIO.H ---
; -----------------------------------------------------------------------
; * s t d i o . h (スタンダードI/Oヘッダ)
; -----------------------------------------------------------------------
CR EQU 0DH
LF EQU 0AH
PSEG MACRO ; プログラム開始
CODE SEGMENT
ASSUME CS:CODE, DS:CODE, SS:CODE
ENDM
PMAIN MACRO ; プログラム開始2
CODE SEGMENT
ASSUME CS:CODE, DS:CODE
ORG 100H
START:
ENDM
PEND MACRO ; プログラムの終わり
CODE ENDS
END START
ENDM
RETMS MACRO ;MS−DOSに戻る
MOV AH,4CH
INT 21H
ENDM
GETCHAR MACRO ;1文字入力
MOV AH,1
INT 21H
ENDM
PUTCHAR MACRO ASC ;1文字出力
MOV AH,2
MOV DL,ASC
INT 21H
ENDM
PRINT MACRO MSG ;文字列の出力
MOV AH,9
MOV DX,OFFSET MSG
INT 21H
ENDM
INPUT MACRO CONBUF ;文字列の入力
MOV AH,10
MOV DX,OFFSET CONBUF
INT 21H
putchar LF
ENDM
NEWLINE MACRO ;改行
putchar CR
putchar LF
ENDM
HEX_ASC MACRO HEX,BUF ;1バイトを2桁の16進数に
LOCAL BR1,BR2
PUSH AX
PUSH CX
MOV AL,HEX
PUSH AX
AND AL,0F0H
MOV CL,4
SHR AL,CL
ADD AL,'0'
CMP AL,'9'+1
JC BR1
ADD AL,7
BR1: MOV BYTE PTR BUF,AL
POP AX
AND AL,0FH
ADD AL,'O'
CMP AL,'9'+1
JC BR2
ADD AL,7
BR2: MOV BYTE PTR BUF+1,AL
POP CX
POP AX
ENDM
CONV2 MACRO HEX,BUF ;2バイトを4桁の16進数文字に
PUSH AX
MOV AX,HEX
hex_asc AH,BUF
hex_asc AH,BUF+2
POP AX
ENDM
HEX_BCD MACRO HEX,BUF ;1バイトを2桁の10進文字に
PUSH CX
MOV AL,HEX
XOR AH,AH
MOV CL,10
DIV CL
ADD AL,'0'
MOV BYTE PTR BUF,AL
ADD AH,'0'
MOV BYTE PTR BUF+1,AH
POP CX
ENDM
ASCIIZ MACRO BUF,NUM ;ASCIIZ文字列の完成
PUSH BX
MOV BL,NUM
XOR BH,BH
ADD BX,OFFSET BUF
MOV BYTE PTR [BX],0
POP BX
ENDM
---------------
C:\>ml timeb.asm
C:\>lld timeb.obj
C:\>exe2com timeb.exe
C:\>command.com /cdir timeb.com
TIMEB COM 115 08-10-29 19:38
C:\>timeb
19:44:26.44
これでパイプが2つ減った。
toshi2.bat (average)
15.04秒
toshi3.bat (average)
15.14秒
toshi4.bat (average) with timeb.com
15.13秒
パイプがあるといっても常駐してるcommand.com相手に何をやっているのだか。
あ、cmd.exeか。分かりません…。(-_-#)
- No.3372 -
このTreeへ
コメント元:3370 へ
[リストへもどる]
pre
(3344)
3374:
Re^2: pst_tm3.awk +@
投稿者:
文太
2008/10/29(水) 20:50
3372 番 文太 さんへのコメント コメント数 1
> toshi4.bat (average) with timeb.com
> 15.13秒
> パイプがあるといっても常駐してるcommand.com相手に何をやっているのだか。
> あ、cmd.exeか。分かりません…。(-_-#)
あの、時間を出してから引き算をしてるので、ここで時間が縮まるわけがない
のですが…。あはははは。そういうば awk な時間や sed な時間もそうでした。
あはははは2。bat 全体の実行速度は気持ち上、速くなったのだ、ということで。
あはははは3。
バッチ全体の速度を測定しないと>文太さん。あはははは4。疲れてる…。(-_-#)
- No.3374 -
このTreeへ
コメント元:3372 へ
[リストへもどる]
pre
(3344)
3375:
TIMEX.awk (with new timeb.com)
投稿者:
文太
2008/10/29(水) 23:19
3374 番 文太 さんへのコメント コメント数 1
BEGIN{}の中では関数定義が使えないみたいでちょっと冗長な感じ…。
でも、できたよん。timeb.comも最適化してあります(笑)。時間確認用
には使えなくなりました。「時」がなく、1/100秒の「.」区切り字が変更さ
れてます。普通の意味ではたいへん読みづらいです。
因みに(個人メモです)、awkだけでは1/100秒が取れません。srand();srand()
でも、systime()でも、strftime()でも駄目。
-------------------------------------------------------
# timex.awk (>Jgawk -f timex.awk)
BEGIN{
# get starttime
"timeb" |getline jikan1
close("timeb")
split(jikan1,tm,":")
##### exec COMMAND i times #####
for(i=1;i<=50;i++) #回数
system("addtail2 <testk.log >tmp.$$$") #コマンド
# system("Oldsed \"\" TESTK.LOG >temp.$$$") #コマンド
# get endtime
"timeb" |getline jikan2
close("timeb")
split(jikan2,tmm,":")
# subtract & get time length
ss = tmm[3]-tm[3]; s = tmm[2]-tm[2]; m = tmm[1]-tm[1];
if (ss < 0) { ss+=100; s--; }
if (s < 0) { s+=60; m--; }
if (m < 0) { m+=60; }
# print the result
if (m==0) { printf "%02d.%02d秒",s,ss }
else { printf "%02d分%02d.%02d秒",m,s,ss }
}
-------------------------------------------------------
-------------------------------------------------------
INCLUDE STDIO.H
GETTIME MACRO
mov ah,2ch
int 21h
ENDM
pmain
gettime
hex_bcd cl,TIME_M
hex_bcd dh,SECOND
hex_bcd dl,MSECOND
print TIME_M
retms
TIME_M db ?,?,':'
SECOND db ?,?,':'
MSECOND db ?,?,CR,LF,'$'
pend
-------------------------------------------------------
C:\>Jgawk -f timex.awk
12.47秒
C:\>Jgawk -f timex.awk
12.64秒
C:\>Jgawk -f timex.awk
12.47秒
C:\>Jgawk -f timex.awk
12.52秒
たぶんバッチで50回回すより awk のシステム関数を回すほうが速い、とい
うことなんでしょうね、たぶん…。
疲れてるのによくやった>文太。
うんにゃ、ビギナーズ・ラックが重なっただけだよ。寝よ、寝よ。
- No.3375 -
このTreeへ
コメント元:3374 へ
[リストへもどる]
pre
(3344)
3376:
Re: TIMEX.awk (with new timeb.com)
投稿者:
としき
2008/10/30(木) 10:51
参照先:http://toshiki.la.coocan.jp/
3375 番 文太 さんへのコメント コメント数 1
> BEGIN{}の中では関数定義が使えないみたいでちょっと冗長な感じ…。
そりゃ、まぁ、関数の定義はBEGINの中ではできませんが。
別途定義した関数はBEGINの中でも使えるはずです。
と思ったんだけどなぁ。自信ない。
処理系によって違うとかあるかもしれない。
少なくとも、jgawkでは使用可能。
BEGIN{
print myfunc()
}
func myfunc(){
return 123
}
- No.3376 -
このTreeへ
コメント元:3375 へ
[リストへもどる]
pre
(3344)
3377:
TIMEX2.awk
投稿者:
文太
2008/10/30(木) 12:57
3376 番 としき さんへのコメント コメント数 1
# timex2.awk (>Jgawk -f timex2.awk); timeb.com, necessary.
BEGIN{
# get starttime in array by split(); [1]-[3]
g_time(stt)
##### exec COMMAND i times #####
for(i=1;i<=50;i++) #回数
system("addtail2 <testk.log >tmp.$$$") #★コマンド
# get endtime in array
g_time(edt)
# subtract & get time length
ss = edt[3]-stt[3]; s = edt[2]-stt[2]; m = edt[1]-stt[1];
if (ss < 0) { ss+=100; s--; }
if (s < 0) { s+=60; m--; }
if (m < 0) { m+=60; }
# print the result
if (m==0) { printf "%02d.%02d秒",s,ss }
else { printf "%02d分%02d.%02d秒",m,s,ss }
}
function g_time(n, jikan){
"timeb" |getline jikan
close("timeb")
split(jikan,n,":")
return n
}
C:\>Jgawk -f timex.awk #last night version
12.74秒
C:\>Jgawk -f timex2.awk #the newest (today) version with jimae func{}
12.63秒
C:\>Jgawk -f timex.awk
12.52秒
C:\>Jgawk -f timex2.awk
12.64秒
C:\>Jgawk -f timex.awk
12.90秒
C:\>Jgawk -f timex2.awk
12.47秒
ま、違いは、ない、と言ってよいでしょう。
しつこいなぁ、ここで違いは出るはずないし、出た違いはそういう意味じゃな
いって。では体感は? 違わないよー。
ま、でも、関数定義、できちゃったということで。気持ち的に速い ???(^^ ゞ
{ }の位置がいけなかったようでした。m(__)m
いつも、いつも、多謝>としきさん。じっつにドンピシャ、ピンポイントでし
た。m(__)m m(__)m m(__)m m(__)m
- No.3377 -
このTreeへ
コメント元:3376 へ
[リストへもどる]
pre
(3344)
3381:
ddd.com(asm) by-product
投稿者:
文太
2008/10/31(金) 23:16
3377 番 文太 さんへのコメント コメント数 1
timebの副産物。多少見苦しいところあり。でも、とんちで解いた!
マクロでやれよ。こっちは、ほんとに、は、はい。でも、それはつまらないもの。
これなら、意味なくdirコマンドと同じく、意味なくdddしそうでしょ。
もう思い残すことはない。バタッ。
;ddd.asm (not dasa-dasa-dasa but date-date-date)
;C:\>ddd
; 2008(平成20)年 10月 31日(金) 11:08:43 pm
; 90% from Asao Kasai, "Sys-Call Handbok," p.144, p.148
INCLUDE STDIO.H
spc equ 20h
GETDATE MACRO
mov ah,2ah
int 21h
ENDM
; CX = year (1980-2099) ; DH = month
; AL = day of week (00h=Sunday) ; DL = day
GETTIME MACRO
mov ah,2ch
int 21h
ENDM
; CH = hour ; CL = minute
; DH = second ; DL = 1/100 seconds
pmain
getdate
mov bl,al ;get pos info from tbl
xor bh,bh
add bx,bx
mov ax,word ptr WEEKTBL[bx] ;store weekday
mov word ptr WEEKDAY,ax
sub cx,2000 ;2008 -> 08 (w/o h == decimal)
hex_bcd cl,YEAR
add cx,12 ;+12 -> heisei (decimal, again)
hex_bcd cl,GENGO
hex_bcd dh,MONTH
hex_bcd dl,DAY
gettime
hex_bcd cl,MINUTE
hex_bcd dh,SECOND
cmp ch,12
ja PM
mov NOON,'a'
mov NOON+1,'m'
jmp NANJI
PM: sub ch,12
mov NOON,'p'
mov NOON+1,'m'
NANJI: hex_bcd ch,HOUR
print FF
newline
retms
FF db spc,'2','0'
YEAR db ?,?,'(','平','成'
GENGO db ?,?,')','年',spc
MONTH db ?,?,'月',spc
DAY db ?,?,'日','('
WEEKDAY db ?,?,')',spc
HOUR db ?,?,':'
MINUTE db ?,?,':'
SECOND db ?,?,spc
NOON db ?,?,'$'
WEEKTBL db '日','月','火','水','木','金','土'
pend
- No.3381 -
このTreeへ
コメント元:3377 へ
[リストへもどる]
pre
(3344)
3394:
blt.asm
投稿者:
文太
2008/11/03(月) 01:06
3381 番 文太 さんへのコメント コメント数 2
万が一、XP+AVG環境でアセンブルできなかったら、僕と同じです。純ドスで
アセンブルしてもXPへはコピーさせてくれません。いったい何なの? 使えない
じゃないの。ウィルス名はTrivialだそうですが、何かのバグでしょう。copyright
の祟りか。
; BLT.asm (B's lettace and tomato--no bacon tonght, I'm on a diet.): B's LisT
; copyleft
; for original codes come, 80% from ecb, 19% from A.Kasai, and 1% from Bunta.
; Change one byte and assemble it, and it's all yours, but don't claim a copy-
; right, not because there're copyright holders but because there is no other
; way to write it in Ms-Dos, of course, except codelabels & variablenames.
; Which, of course, does not show in the final .com file.
; To be sure, you don't have to change one byte. It's still all yours.
; And please don't file me in court!
;
; LIST NORMAL & READONLY FILES of current directory; no other info whatsoever.
; Use this in a batchfile, or for writing it.
; I cannot remember when I wanted this first. I have wanted this for such
; a long time!
;Bits Description in INT 21 AEh (Table 01420) from Ralf
;5 archive 32
;4 directory 16
;3 volume label 8
;2 system 4
;1 hidden 2
;0 read-only 1
; (your favorite combination. Add them,
; & rewrite it onto * part. ml.exe & masm.exe accept decimal.)
INCLUDE STDIO.H
pmain
mov ah,4eh
mov dx,offset FILE
mov cx,1h ;no directory but read-only OK *
int 21h ;FINDFIRST
MAIN:
jc BYEBYE
call DISP
mov ah,4fh
int 21h ;FINDNEXT
jmp MAIN
BYEBYE:
retms
DISP:
mov ah,6 ;-
mov si,offset 80h + 1Eh ;DTA in PSP (starts at 80h, in 100h org)
cld ;and found ASCIZ str = filename
;1Eh 13 BYTEs ASCIZ filename+extension
DISP_MAIN:
lodsb
cmp al,0
jz DISP_END
mov dl,al ;-
int 21h ;DIRECT CONSOLE OUTPUT
jmp DISP_MAIN
DISP_END:
newline
ret
FILE db '*.*',0
CODE ENDS
END START
- No.3394 -
このTreeへ
コメント元:3381 へ
[リストへもどる]
pre
(3344)
3395:
blt2.asm
投稿者:
文太
2008/11/03(月) 12:12
3394 番 文太 さんへのコメント
; BLT.asm (B's lettace and tomato--no bacon tonght, I'm on a diet.): B's LisT
; copyleft (possible copyright A.Kasai & edc)
; Next mornings sometimes bring you a miracle.
; Now you can assemble this at Win XP! (with stdio.h)
;
; >blt (list normal & readonly files of currect directory, not directory etc)
; AAA
; ABC
; ABC.TXT
INCLUDE STDIO.H
pmain
FILE db '*.*',0 ;this used to cause alot of trouble
mov ah,4eh ;Gochya!
mov dx,offset FILE
mov cx,1h ;no directory but read-only OK *
int 21h ;FINDFIRST
MAIN: jc BYEBYE
call DISP
mov ah,4fh
int 21h ;FINDNEXT
jmp MAIN
BYEBYE: retms
DISP: mov ah,6 ;-
mov si,offset 80h + 1Eh ;DTA in PSP (starts at 80h, in 100h org)
cld ;and found ASCIZ str = filename
;1Eh 13 BYTEs ASCIZ filename+extension
DISP_MAIN:
lodsb
cmp al,0
jz DISP_END
mov dl,al ;-
int 21h ;DIRECT CONSOLE OUTPUT
jmp DISP_MAIN
DISP_END:
newline
ret
CODE ENDS
END START
- No.3395 -
このTreeへ
コメント元:3394 へ
[リストへもどる]
pre
(3344)
3396:
Re: blt.asm
投稿者:
konno
2008/11/03(月) 13:32
3394 番 文太 さんへのコメント コメント数 1
> 万が一、XP+AVG環境でアセンブルできなかったら、僕と同じです。純ドスで
> アセンブルしてもXPへはコピーさせてくれません。いったい何なの? 使えない
> じゃないの。ウィルス名はTrivialだそうですが、何かのバグでしょう。
やってみましたが、EXEファイル生成時にAVGが警告して、失敗しますね。元ネタは
「アセンブラ入門」の練習問題の解答ですか。
http://www5c.biglobe.ne.jp/~ecb/assembler2/assembler10.html
> copyrightの祟りか。
案外そうだったりして。(^^; というのは半分冗談ですが、(^^;;
AVGは、ファイルの先頭部にこのバイナリパターンがあるかをチェックしている
ようですね。nop を挟み込んでも駄目でした。
; mov dx,offset FILE
mov si,offset FILE
mov dx,si
としたら大丈夫だったですが、すでに自己解決してますね。先頭にDATAを持ってくる
だけでよかったんですか。(++;
#まぁ、いきなりファイル検索から始まるプログラムなんて、ウイルスぐらい
でしょうから、練習問題の解答をそのまま使ったのが祟ってますね。(^^;
- No.3396 -
このTreeへ
コメント元:3394 へ
[リストへもどる]
pre
(3344)
3397:
Re^2: blt.asm
投稿者:
文太
2008/11/03(月) 16:27
3396 番 konno さんへのコメント コメント数 1
konnoさん
> やってみましたが、EXEファイル生成時にAVGが警告して、失敗しますね。元ネタは
> 「アセンブラ入門」の練習問題の解答ですか。
> http://www5c.biglobe.ne.jp/~ecb/assembler2/assembler10.html
もちろん、そうです。 でも、ハンドルは「ecb」でしたね。間違えてた。祟り
だ。(T-T)
> AVGは、ファイルの先頭部にこのバイナリパターンがあるかをチェックしている
> ようですね。nop を挟み込んでも駄目でした。
おお、さすが。そう考えそうやってみるのか(ってほど分かっているわけでは
ないのですけど… (^^;ゞ)。いえいえ、たぶん分かってます。
> ; mov dx,offset FILE
> mov si,offset FILE
> mov dx,si
> としたら大丈夫だったですが、すでに自己解決してますね。先頭にDATAを持ってくる
> だけでよかったんですか。(++;
いえ、あれでは甘いようで、まだ悶々としていました。(AVGがいけないの
は、分かっていても…)
いえ、いちおう書いておくと、大した使い方でなかったのでマクロを使わずに
全部書きだした asm ファイルでやったら、やっぱり引っかかってしまいまして。
DATAが先頭でもやっぱりダメだった。r86.exeでアセンブルしてみようと…。
そのあと七転び八起きに近いドタバタで嫌になってました。「動くのできたんだ
からいいじゃん。でも、気分が非常に悪い…」と。
> #まぁ、いきなりファイル検索から始まるプログラムなんて、ウイルスぐらい
> でしょうから、練習問題の解答をそのまま使ったのが祟ってますね。(^^;
ま、祟りですね。警告さえ無視してしまったからなぁ。
ウィルスって、いきなりファイル検索から始めるプログラムなんですかぁ。あ
るでしょう、そんなの。僕の切った貼ったマクロなんて、そんなのばっかだけど
なぁ。
#レベルが違う
ただですね、あれがうまくいかないのの歴史は長いのですよ。たぶん1カ月前
にも同じところでひっかかり、それがAVGのせいだとさえ分からなかった。た
ぶん、その前は1年半くらい前??? でも、あれが欲しかった。このCXさえ
変えればいいのまで分かってるのに、なんでアセンブルだけできないんだ、と。
コードなんてこれしかありえねぇんだぞ、って。で、昨日、ふとモバでやったら
できてしまった。ところが、コピーさえ許してくれない…。名前だって、1月前
から用意されてたのにぃ。言い訳になってない。ダメ、ダメ、ダメ。(c)wolfles
さっきは、例の黒本を頼りにジャンプを short にしてみたりしたけど、なんだ、
全く変わらないじゃないか…とか。
すっごく助かりました。ありがとうございます。
ほんと、欲しかったのですよ、この仕事してくれるツール。dir と sed では、
いちいちOSのヴァージョンで違うし、ダサダサだし。実は ddd も。timexは、
お勉強。
ddd,to、bltと収穫だぁ。copyright の神様、怒らないでね。ガッツ
ありますから。
これも書いちゃえ(祟られるぞ)。
引用です。『We Love Vz Editor II』, p.194
「VZのマクロにも、ほとんどウラ技と呼んでもいいような危ない機能がいく
つか隠されています。そして、これらを会得して初めて、VZのマクロを制覇し
たといえるでしょう。しかしその道のりは、前章で手とり足とり説明してきたよ
うな甘っちょろいものではありません。Cを修得している必要はいうまでもあり
ません。 付属するソースの MACRO.ASM と EXPR.ASM 程度は読んでいてあたりま
えです。作ったマクロの数が 20 や 30 ではまだまだです。「努力」と「根性」、
これがすべてです。」 (兵藤嘉彦)
ですって。がんばりますよ、使わせてもらいますよ、c.mos様。最近、ほんとに
神様みたいに思えてきた…。一生つき合うのか…。
例の衝動買い週間のときに、買ってしまってました…。定価\2300。売価500円く
らいだったかな。ま、それほど読むところの多い本でもないのだけど、コレクター
なもんで。綺麗な本です。平成2年5月10日 改訂新版3刷。
- No.3397 -
このTreeへ
コメント元:3396 へ
[リストへもどる]
pre
(3344)
3399:
Re^3: blt.asm
投稿者:
konno
2008/11/04(火) 00:06
3397 番 文太 さんへのコメント コメント数 1
> いえ、いちおう書いておくと、大した使い方でなかったのでマクロを使わずに
> 全部書きだした asm ファイルでやったら、やっぱり引っかかってしまいまして。
> DATAが先頭でもやっぱりダメだった。r86.exeでアセンブルしてみようと…。
??? DATAが先頭なら出来ましたよ。Win2000ですが。もしかして、obj ファイルが
残っていたのでは。これが残っていると、exeが更新されないので。それともXPだと
駄目なのかなぁ。今ちょっと空いてないので確認できないんです。(^^;
> ウィルスって、いきなりファイル検索から始めるプログラムなんですかぁ。あ
> るでしょう、そんなの。
普通のプログラムなら必ず起動時メッセージがまず先にあるでしょう。逆にウイルスが
メッセージを出すわけないですからねぇ。(^^;
> ただですね、あれがうまくいかないのの歴史は長いのですよ。たぶん1カ月前
> にも同じところでひっかかり、それがAVGのせいだとさえ分からなかった。た
> ぶん、その前は1年半くらい前???
げげ、そんな前から? (++; もっと早く書き込んでくれれば・・・
- No.3399 -
このTreeへ
コメント元:3397 へ
[リストへもどる]
pre
(3344)
3404:
Re^4: blt.asm
投稿者:
文太
2008/11/05(水) 12:50
3399 番 konno さんへのコメント
konnoさん
> ??? DATAが先頭なら出来ましたよ。
すいません、どうしても事態が再現できなくなってしまいました。つまり、う
まくいってしまうのです。ま、いっか。すいませんです。
> 普通のプログラムなら必ず起動時メッセージがまず先にあるでしょう。逆にウイルスが
> メッセージを出すわけないですからねぇ。(^^;
なるほど。僕はDATAがたまたま出すアドレスがものすごい低い確率でウィ
ルス的コードと一致してしまったと推測して、移動させたのです。だって、あれ
はほんとにあれ以外書きようのないプログラムで、それが引っかかったわけです
から。
でも、金野さん、お見事。&多謝。
> > ただですね、あれがうまくいかないのの歴史は長いのですよ。
> げげ、そんな前から? (++; もっと早く書き込んでくれれば・・・
書いたことに嘘はないのですが、自分の欲望が誇張されてるかな。Vzマクロ
でもできる(ねこさんのところにサンプルもある)のに、書かなかったのだから
(ネストが不必要に深いのですが、でも、マクロじゃなく .com が欲しかった)。
それで(も)、あれ、欲しかった。ずっとずっと欲しかった。ただレベル低すぎ
て(アセンブラが仕事してくれるだけで嬉しい)、質問も…。プロジェクトが次
から次ぎに出てくるのもあるなぁ…。
ありがとうございました。次から素直に訊いてしまいます。m(__)m
- No.3404 -
このTreeへ
コメント元:3399 へ
[リストへもどる]
pre
(3344)
3379:
Re^2: pst_tm3.awk +@
投稿者:
konno
2008/10/31(金) 07:34
3372 番 文太 さんへのコメント コメント数 1
> ファンクション・コールって2秒ずつってのは僕の聞き間違いでしたね
これはファイルのタイムスタンプが2秒単位ということではないですかね。
> --- timeb.asm ---
> ;p.148 をちょっとだけ改変
着実に進化していますね。(^_^)
私はやっとC++でHello.exeを作りました。(^^;
XPマシンならtimeb.comでもVZマクロのファンクションコールでもほとんど変わらない
ような気がします。(^^;
- No.3379 -
このTreeへ
コメント元:3372 へ
[リストへもどる]
pre
(3344)
3380:
Re^3: pst_tm3.awk +@
投稿者:
文太
2008/10/31(金) 11:18
3379 番 konno さんへのコメント コメント数 1
konnoさん
微妙に話がずれているみたいで…。
> XPマシンならtimeb.comでもVZマクロのファンクションコールでもほとんど変わらない
> ような気がします。(^^;
でも、バッチからもawkからも、Vzマクロは呼べないんですよぉ。
そういう意味なんです。
- No.3380 -
このTreeへ
コメント元:3379 へ
[リストへもどる]
pre
(3344)
3382:
Re^4: pst_tm3.awk +@
投稿者:
konno
2008/11/01(土) 00:26
3380 番 文太 さんへのコメント コメント数 1
> でも、バッチからもawkからも、Vzマクロは呼べないんですよぉ。
だからぁ、VZマクロからテスト.exeを呼んで、時間計測をするということですよ。
何か勘違いしてるかなぁ。
- No.3382 -
このTreeへ
コメント元:3380 へ
[リストへもどる]
pre
(3344)
3383:
Re^5: pst_tm3.awk +@
投稿者:
文太
2008/11/01(土) 10:37
3382 番 konno さんへのコメント コメント数 1
konnoさん
> だからぁ、VZマクロからテスト.exeを呼んで、時間計測をするということですよ。
> 何か勘違いしてるかなぁ。
してません。「そういえばVzマクロのほうに計測させればいいんだ」とか昨
晩、ようやく思いついていました。そう仰ってもらっていると気づかずに…。相
当いってしまっているみたいですねぇ。失礼いたしました。
- No.3383 -
このTreeへ
コメント元:3382 へ
[リストへもどる]
pre
(3344)
3384:
XPの標準出力をVZコンソールに
投稿者:
konno
2008/11/01(土) 21:51
3383 番 文太 さんへのコメント コメント数 1
> してません。「そういえばVzマクロのほうに計測させればいいんだ」とか昨
> 晩、ようやく思いついていました。そう仰ってもらっていると気づかずに…。相
> 当いってしまっているみたいですねぇ。失礼いたしました。
文太さん、相当お疲れのようですね。ゆっくりいきましょう。(^^;
ところで話が変わりますが、いい物を見つけました。
toint29 : 標準入力からのデータをint 29h(コンソール出力)に振り向ける
http://www.vector.co.jp/soft/dos/hardware/se036407.html
主にNT, OS/2上でのVzのコンソールファイル用。
Windows NTやOS/2のDOS窓の画面出力はint 29hを経由していないため、
Vzエディタの子プロセス上での出力結果の取込が働かず不便である。
しかし、このプログラムを以下の例のようにコマンドライン最終段に
指定すれば、その出力結果についてはコンソールファイルへの取込が
可能となる。
例:
C:\>dir |toint29
ということで、XPのコマンドラインで32ビットなコマンドでもVZのコンソールに直接
出力できます。コマンド名が長いのはRENすればいいし、これは便利です。(^_^)
- No.3384 -
このTreeへ
コメント元:3383 へ
[リストへもどる]
pre
(3344)
3385:
Re: XPの標準出力をVZコンソールに
投稿者:
としき
2008/11/02(日) 10:25
参照先:http://toshiki.la.coocan.jp/
3384 番 konno さんへのコメント コメント数 2
> ところで話が変わりますが、いい物を見つけました。
> toint29 : 標準入力からのデータをint 29h(コンソール出力)に振り向ける
これってそういうものだったんだ。
大昔からアーカイブは取得していたのですが、ファイルリストを見てもドキュメ
ントが同梱されていなかったので、そのままほったらかしにしていたのでした。
あらためてソースを読んだら、コメントにきちんと明記してありましたね。
そのうち使ってみましょう。
- No.3385 -
このTreeへ
コメント元:3384 へ
[リストへもどる]
pre
(3344)
3386:
toint29.exe!!!
投稿者:
文太
2008/11/02(日) 12:39
3385 番 としき さんへのコメント コメント数 2
> C:\>dir |toint29
> bugs:
> ・入力をバッファリングしてないので遅い
> ・TABを展開していない
(toint29.cより)
「TABを展開しない」とは?
---abcd.txt---
aaa <tab> bbb <tab> ccc
--------------
C:\>type abcd.txt |toint29
aaa@bbb@ccc #@はちょっと違うけど
ここで(Vz常駐です)、\[ESC]、じゃーん、
C:\>type abcd.txt |toint29
aaa <tab> bbb <tab> ccc
やるじゃん! すごい! 欲しかったのよ、これ。ずぅーと、ずぅーと欲しか
ったの。Vz以外の楽な方向(コンソール・アプリ)で問題を解決したがるタイ
プなので。m(__)m
※「TABを展開しない」が「スペースに展開しない」を意味するなら、このま
まのほうがいいじゃん。
すぐさまto.exeにリネーム。
C:\>type abcd.txt |to
aaa@bbb@ccc #やりぃ!
更に
C:\>dir c:\bin\to.exe |to
1996 05 20 02:38 2,300 TO.EXE
こ、こんな大昔から…。
よくぞ見つけてくれました! ぼ、ぼくぅは〜幸せだなぁ。>konnoさん
m(_B_)m m(_B_)m m(_B_)m
--- toint29.c ---
/* (c) ataru */
#include <io.h>
#include <fcntl.h>
void dispchar(int c) /* ここが関数, asm連係 */
{
_asm {
mov ax, c
int 29h
}
}
int main()
{
unsigned char c;
setmode(0, O_BINARY); /* これがキモなんだろう。? */
while (read(0, &c, 1)) {
dispchar(c); /* ここで呼んでる */
}
return 0;
}
こ、これだけ…。でも、す、すごすぎる。
(参考、笑&汗)
--------D-29---------------------------------
INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
AL = character to display
Return: nothing
BX may be destroyed by some versions of DOS 3.3
Notes: automatically called when writing to a device with bit 4 of its device
driver header set (see also INT 21/AH=52h)
COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
vector and assume that ANSI.SYS is installed if the segment is larger
the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
the default handler under DESQview 2.2 understands the <Esc>[2J
screen-clearing sequence, calls INT 10/AH=0Eh for all others
SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79"AVATAR.SYS"
C:\LSI>lcc TOINT29.C
TOINT29.c 22: '_asm' undefined
TOINT29.c 22: syntax error near '{'
TOINT29.c 23: 'mov' undefined
TOINT29.c 23: syntax error near 'ax'
TOINT29.c 23: 'ax' undefined
TOINT29.c 24: syntax error near 'int'
TOINT29.c 24: syntax error near 'int'
TOINT29.c 24: bad number '29h'
TOINT29.c 25: Warning: useless expression
TOINT29.c 31: Warning: function 'setmode' undefined -- assumed to be int
試食版では色々足りないみたい…。
- No.3386 -
このTreeへ
コメント元:3385 へ
[リストへもどる]
pre
(3344)
3388:
Re: toint29.exe!!!
投稿者:
konno
2008/11/02(日) 16:02
3386 番 文太 さんへのコメント コメント数 1
> やるじゃん! すごい! 欲しかったのよ、これ。ずぅーと、ずぅーと欲しか
> ったの。Vz以外の楽な方向(コンソール・アプリ)で問題を解決したがるタイ
> プなので。m(__)m
だいぶ前に見つけてはいたんですが、目的と違っていたもので(^^;;(ぉぃ)
これの常駐型が欲しかったんですが、必要な時だけ指定すればいいので、
この方が良かったのかも。(^^;
> ※「TABを展開しない」が「スペースに展開しない」を意味するなら、このま
> まのほうがいいじゃん。
そうですね。タブはタブのままのほうが良い場合が多いですしね。
> すぐさまto.exeにリネーム。
> C:\>type abcd.txt |to
おお、これは良いネーミング。いただきます。(^_^)
> C:\>dir c:\bin\to.exe |to
> 1996 05 20 02:38 2,300 TO.EXE
> こ、こんな大昔から…。
> よくぞ見つけてくれました! ぼ、ぼくぅは〜幸せだなぁ。>konnoさん
隠し持っていたことに、若干の後ろめたさを感じていたりして。(^^;
作者は有名なanakataさんだったんですね。ん?何処かで聞いたような名前(^^;
> 試食版では色々足りないみたい…。
私もTC201で(初めて)やってみました。(^^;
TC は統合環境版なんですね。私が使っているTB(TurboBasic)とおんなじだ。
コマンドライン版はTCCですね。
で、これもやっぱりエラーになります。インラインアセンブルがTASMなので、
これでは出来なさそうですね。
- No.3388 -
このTreeへ
コメント元:3386 へ
[リストへもどる]
pre
(3344)
3392:
Re^2: toint29.exe!!!
投稿者:
文太
2008/11/02(日) 22:24
3388 番 konno さんへのコメント
konnoさん、ま、結果オーライということで(まだ幸福モード)。
> だいぶ前に見つけてはいたんですが、目的と違っていたもので(^^;;(ぉぃ)
> これの常駐型が欲しかったんですが、必要な時だけ指定すればいいので、
> この方が良かったのかも。(^^;
うーん、常駐まで欲張らなくても、と思いますが…。もちろん、止めませんし
完成の暁には使わせてもらうのにやぶさかではありませんけれど…。
もちろん、すごく不便だったのですが(僕はTS的テキスト処理が好きだった
りするし)、それでもけっこう慣れるものですよね。なので、コンソールの完全
参照(純Dos状態に同じ)は、今や欲張りとバーを下げてしまっているわけで
toint29.exeですっかり幸せなのです
> > すぐさまto.exeにリネーム。
> おお、これは良いネーミング。いただきます。(^_^)
ほんと? 良心が疼いているだけでしょ。
dddといいけっこう酷い。 ただタイピングが少ないに越したことはないので、
こっちは奮発して2文字コマンド。
> 隠し持っていたことに、若干の後ろめたさを感じていたりして。(^^;
ま、ま。僕はまだ幸福感の雲の中です。
> 私もTC201で(初めて)やってみました。(^^;
としきさんのすご技が参考になってくれればと念じておりまする。
- No.3392 -
このTreeへ
コメント元:3388 へ
[リストへもどる]
pre
(3344)
3389:
Re: toint29.exe!!!
投稿者:
としき
2008/11/02(日) 16:58
参照先:http://toshiki.la.coocan.jp/
3386 番 文太 さんへのコメント コメント数 1
前のOS付属ツールのヘルプメッセージの時も思ったのですが。
引用量があまり多いと著作権侵害になりかねないかと。
あるいは、他者の権利と同様に自己の権利にも無頓着だ、と誤解されたりして。
#いや、まぁ、その
> setmode(0, O_BINARY); /* これがキモなんだろう。? */
0番ファイルをバイナリーモードに設定する、ということですよね。
おそらく、ファイルの0番は標準入力であろう、とか、明示的なオープンがない
という事は暗黙的にオープンされているのであろう、など、色々なことが推測で
きます。
> 試食版では色々足りないみたい…。
試食版てLSI Cのことですよね。
これはインラインアセンブラの構文が異なります。
インラインアセンブラというのはC言語の拡張部分であって標準化の対象外です
から、言語処理系ごとに構文が異なります。
toint29自身はBorlandC(またはTurboC)で記述されているようですね。
確か、マイクロソフトのCの場合は、さらに異なった構文だったはず。
でも、LSI Cでコンパイル可能なソースにすることも簡単と思えるくらいのサイズ
のプログラムですよね。
- No.3389 -
このTreeへ
コメント元:3386 へ
[リストへもどる]
pre
(3344)
3391:
Re^2: toint29.exe!!!
投稿者:
としき
2008/11/02(日) 19:42
参照先:http://toshiki.la.coocan.jp/
3389 番 としき さんへのコメント コメント数 1
とりあえず、LSI C-86でコンパイルを通すだけならこれだけ。
/*#include <fcntl.h> 不要*/
/*↓マクロ化*/
char _asm_a();
#define dispchar(c) \
_asm_a("\nmov ax, dx\nint 29h",_asm_a,_asm_a,_asm_a,c);
int main()
{
unsigned char c;
/* setmode(0, O_BINARY); 削除*/
(以下略)
ただし、動くかどうかはわかりません。
生DOSで、とりあえずハングアップしない事だけは確認したけど。
- No.3391 -
このTreeへ
コメント元:3389 へ
[リストへもどる]
pre
(3344)
3393:
Re^3: toint29.exe!!!
投稿者:
文太
2008/11/02(日) 22:25
3391 番 としき さんへのコメント
--------------------------------------
C:\>lcc TO2.C
lld @link.i
C:\LSI>dir |to2
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 5094-14F9 です
C:\LSI のディレクトリ
以下、略。
--------------------------------------
というわけで、XPで仕事してくれましたよ。としき移植版。おお、あんなも
のがさらさら翻訳できるわけかぁ。すごいなぁ。(゜-゜)トホイメ
ま、作者のコンパイル済みがあるので、わざわざこっちを使うこともないんで
すけどね。
著作権については、ちょいと見解の相違かな。copyleftな人生観は他人の権利
をちゃんと守ります。
--- toint29.c ---
/* (c) ataru */
って書いたし、本から写させてもらったら、ページ数も入れてるし。ガッツも
あるし(笑)。
#いや、まぁ、その、な、わけですが、2。
議論なしね。m(__)m
追伸:黒い『MS-DOS ハンドブック』が出てきました。 買った日のことをまざ
まざと思い出せます。たぶん旧8PCを買って、3ケ月以内。『勝手に MS-DOS』
読了後1カ月以内。「こんなもの読めるわけねぇだろー。要らねーよー。間違え
た〜。 生協で \3200 も払っっちまったよ〜〜。(注文での取り寄せでした。お
昼ご飯の直前でした。)財布からだよ〜。昼飯ぬきだ。今日は、俺、すごく不幸
だ」と思った。貧しくて飢えてて、財産といえるのはガッツだけ(もちろんそん
なもの、当時は財産に勘定されるわけがない)。しかし、こいつをついに開くと
きが来たか。すっかりじいさんだ。
あ、もちろん、MS-DOS ver.2.0 対象のものです。
- No.3393 -
このTreeへ
コメント元:3391 へ
[リストへもどる]
pre
(3344)
3387:
Re^2: XPの標準出力をVZコンソールに
投稿者:
konno
2008/11/02(日) 15:37
3385 番 としき さんへのコメント コメント数 1
> これってそういうものだったんだ。
> 大昔からアーカイブは取得していたのですが、ファイルリストを見てもドキュメ
> ントが同梱されていなかったので、そのままほったらかしにしていたのでした。
私もだいぶ前に落としてたんですが、目的が、ソースを参考にして、常駐型の
コンソール取り込みをやりたいと思っていた物で、こんなに便利に使えるとは
思ってもいませんでした。(^^;
で、32ビット常駐コンソールアプリのほうは未だ挫折中ですが、としきさんなら
これが出来そうですよね。(^^; やってみませんか? (^^;
- No.3387 -
このTreeへ
コメント元:3385 へ
[リストへもどる]
pre
(3344)
3390:
Re^3: XPの標準出力をVZコンソールに
投稿者:
としき
2008/11/02(日) 17:18
参照先:http://toshiki.la.coocan.jp/
3387 番 konno さんへのコメント コメント数 1
> で、32ビット常駐コンソールアプリのほうは未だ挫折中ですが、としきさんなら
> これが出来そうですよね。(^^; やってみませんか? (^^;
出来ませんからしません。(^.^;
32ビット常駐コンソールアプリなんて、作ろうと思ったこともありません。
- No.3390 -
このTreeへ
コメント元:3387 へ
[リストへもどる]
pre
(3344)
3401:
Re^4: XPの標準出力をVZコンソールに
投稿者:
konno
2008/11/04(火) 00:51
3390 番 としき さんへのコメント コメント数 1
> 出来ませんからしません。(^.^;
> 32ビット常駐コンソールアプリなんて、作ろうと思ったこともありません。
そ、そんなつれない・・・残念、釣れなかったか。(^^;
toint29のようなルーチンをコールバック関数に仕込むだけかと思ったんですが。
そんなに簡単なわけないですよね。参考になりそうなサイトはあるんですが、
結構敷居が高そうです。(++;
- No.3401 -
このTreeへ
コメント元:3390 へ
[リストへもどる]
pre
(3344)
3403:
Re^5: XPの標準出力をVZコンソールに
投稿者:
としき
2008/11/04(火) 22:50
参照先:http://toshiki.la.coocan.jp/
3401 番 konno さんへのコメント コメント数 1
> toint29のようなルーチンをコールバック関数に仕込むだけかと思ったんですが。
そうか、コールバック関数なんてものを使うのですね。
ということすらわかっていない人間なもので。
生DOSの場合だと、常駐ソフトを作る場合は、int21hのファンクションコール
等をフックする、というように作ります。でも、32ビットコンソールならば、
ファンクションコールなんてものは使わないと思っているのですよ。1文字表示
するにも、当然、WinAPI呼び出しを使うのだろうな、と。その場合、どうやって
呼び出しをフックするのだろう、と考えてしまうのですが、その考え方がそもそ
も間違っているんでしょうね。
> そんなに簡単なわけないですよね。参考になりそうなサイトはあるんですが、
そのサイト、教えていただけます?
サンプルソースが載っていれば見てみたいな、と思いまして。
ちなみに、私、向こう数週間で、Windows上で動くSNMPのトラップをあれやこれや
するソフトと、板塀のスクリプト改造と、UNIXのシェルスクリプトと、という感
じで、作りたいものはいっぱいあるのですが、なかなか能力が追いついていきま
せん。
- No.3403 -
このTreeへ
コメント元:3401 へ
[リストへもどる]
pre
(3344)
3406:
Re^6: XPの標準出力をVZコンソールに
投稿者:
konno
2008/11/06(木) 01:21
3403 番 としき さんへのコメント
> そのサイト、教えていただけます?
> サンプルソースが載っていれば見てみたいな、と思いまして。
うう、どうやって検索したのか、見つかりません。申し訳ない。m(__)m
> ちなみに、私、向こう数週間で、Windows上で動くSNMPのトラップをあれやこれや
> するソフトと、板塀のスクリプト改造と、UNIXのシェルスクリプトと、という感
> じで、作りたいものはいっぱいあるのですが、なかなか能力が追いついていきま
> せん。
げげ、そんなにあるのでは、なおさら大変ですね。私は昔作ったプログラムも
直せなくなってきていて、もうだめぽ・・・
- No.3406 -
このTreeへ
コメント元:3403 へ
[リストへもどる]
pre
(3344)
3360:
Re^7:同じ XPでもいろいろ違いが
投稿者:
konno
2008/10/26(日) 02:20
3356 番 文太 さんへのコメント コメント数 1
> なるほどプロンプトの時間を使うのですね。そっちならさすがにコンソール
> 参照できるなぁ…。
BATを直に実行すると、CMD.EXEが処理するので、コンソールには出ないですね。
ということは、command /c timer.bat という話ですね。
私の場合は、VZ.DEFのエイリアスに、
cm command /c %1
と、登録しておいて、コマンドラインで
cm tt.bat
としてます。tt.batの中身は
PROMPT $t .
echo >nul
test.exe
echo >nul
これで、メモアロエラーも出ないし、コンソールに出るし、出力後のプロンプトも
元のままです。しかし、このtt.batを直に実行した場合、自宅のXPHomeでは元の
プロンプトに戻るんですが、職場のXPproではプロンプトが時刻表示のままになって
しまいます。
普通に考えるとこっちが正常動作のようにも思えるんですが、BATの最後に
PROMPT $p$g
などとしても、効かないんですよね。なぜこんな違いがあるんでしょうね。
> メモアロな件、ありがとうございました。そうか、sw4 が推奨なんですよね。
> 「よしsymdeb!」な頃に一度「SW4の山彦文太」になったはずだったのに、
> なぜかsw3になってました。???
XPではSW4で常駐すると、swapがうまくいかないようで、フリーメモリが減って
しまいます。結局XPではメモリの分断は解決できないようなので、SW3で小文字
か、非常駐で使うしかないんでしょうね。
> 「気のせい」と仰っているので特定できないのでしょうが、どんな感じででし
> ょうか。「こんな感じ」程度お教えいただけれと、注意が向いて「ほんとだ」と
> か「そうでもないみたい」と認識できる可能性が高まるのですけれど。
気のせいではないと思うんですが、もう忘れてしまっているので。(^^;
SP2のころはこんなにメモリの分断が起きなかったように思うんですよ。
SP3になって、大文字コマンドでスワップすると、そこに新たなcommand.com
が居座るようになったような気がするんです。SP2の環境があれば比較できる
と思うんですが・・・
- No.3360 -
このTreeへ
コメント元:3356 へ
[リストへもどる]
pre
(3344)
3373:
Re^8:同じ XPでもいろいろ違いが
投稿者:
文太
2008/10/29(水) 20:37
3360 番 konno さんへのコメント
色々な悩みその他があり、遅くなりました。m(__)m
> 私の場合は、VZ.DEFのエイリアスに、
> cm command /c %1
> と、登録しておいて、
これは賢い。いただきます。m(__)m
> としてます。tt.batの中身は
> PROMPT $t .
> echo >nul
> test.exe
> echo >nul
この話はとりあえずおいておきましょう。m(__)m
☆☆☆☆☆☆☆☆
> 結局XPではメモリの分断は解決できないようなので、SW3で小文字
> か、非常駐で使うしかないんでしょうね。
☆☆☆☆☆☆☆☆
これが結論なんですね。了解しました。よく分かってないものですから、何度
も何度も同じ話を繰り返してしまいました。上の方針でいきます。SW3の小文
字派です。m(__)m
> 気のせいではないと思うんですが、もう忘れてしまっているので。(^^;
> SP2のころはこんなにメモリの分断が起きなかったように思うんですよ。
> SP3になって、大文字コマンドでスワップすると、そこに新たなcommand.com
> が居座るようになったような気がするんです。SP2の環境があれば比較できる
> と思うんですが・・・
僕もさくっとSP3にしてしまって。うーん、詳細分かりませんが何かあった
らどうか相談にのってやってください。m(__)m
- No.3373 -
このTreeへ
コメント元:3360 へ
[リストへもどる]
pre
(3344)
3349:
Re^3: SD,CF,ATA ベンチマーク
投稿者:
としき
2008/10/24(金) 00:28
参照先:http://toshiki.la.coocan.jp/
3346 番 文太 さんへのコメント コメント数 1
> このバッチではうまくないですよね。
厳密に測定しようとなると、おっしゃる通りですね。
私の場合、手がぽんぽんと2回続けてリターンを叩いてしまうので、1秒程度の
誤差で済むと思っています。100回とか1000回ループさせれば、1回あた
りの誤差は当然100分の1とか1000分の1になるわけですし。
あと、DOSのバージョンに依存するかもしれないのですが、昔は割と常套手段
だったらしいのが
ver | time
というもの。verコマンドの出力の改行をtimeコマンドに入力させる事で次の行に
遷移させる、というしくみです。少なくとも、PC-98のDOS6ではうまく動きます。
> (参考)
これ、OSは何でしょう?
噂によると、Win2k/XPでは、出力の表示形式をカスタマイズできるらしいのです
が、どうすればいいのかは知りませんし、そもそもガセかもしれません。
- No.3349 -
このTreeへ
コメント元:3346 へ
[リストへもどる]
pre
(3344)
3350:
Re^4: SD,CF,ATA ベンチマーク
投稿者:
文太
2008/10/24(金) 00:51
3349 番 としき さんへのコメント コメント数 1
としきさん
> 私の場合、手がぽんぽんと2回続けてリターンを叩いてしまうので、1秒程度の
> 誤差で済むと思っています。100回とか1000回ループさせれば、1回あた
> りの誤差は当然100分の1とか1000分の1になるわけですし。
なるほどねぇ。すごいや。思いつきもつきませんでした。面白いです。m(__)m
> あと、DOSのバージョンに依存するかもしれないのですが、昔は割と常套手段
> だったらしいのが
> ver | time
XPでも通りましたよ。すごい! 使えるもので工夫せよ、ですね。m(__)m
これは最初に思いついた人、すごいけど。
> > (参考)
> これ、OSは何でしょう?
XPです。カスタマイズ法は…???
ご存じのとおり、konnoさんの方法で結果が出せるようになりました。すごいなぁ
お二方。年季の入り方が違う。
- No.3350 -
このTreeへ
コメント元:3349 へ
[リストへもどる]
pre
(3344)
3351:
Re^5: SD,CF,ATA ベンチマーク
投稿者:
としき
2008/10/24(金) 02:13
参照先:http://toshiki.la.coocan.jp/
3350 番 文太 さんへのコメント コメント数 1
> XPです。カスタマイズ法は…???
今のところ、噂はやっぱりガセのようです。
が、噂の出所のようなものは調べがつきました。以下、私の手元にXPマシンが
ないので直接確認はしていないという事は御了解いただくとして。
環境変数をセットする set というコマンドがあります。
新しいOSでは、このコマンドが随分と拡張されているらしいです。
それこそ、任意のフォーマットで日時を設定できるくらい。
でもって、環境変数の表示は echo コマンドで可能。
これは、古いDOSから変わっていない部分ですね。
この辺の技術を使うと、以下のようなバッチファイルが書けるらしい。
set starttime=%d%t
rem ↑この辺は適当、正確なところは調べて下さい
foo.exe > temp.$$$
set endtime=%d%t
echo starttime
echo endtime
こういう事で、任意のフォーマットで日時が表示できる、というのが伝聞の過程
で、timeコマンドの出力がカスタマイズできる、ということに変化してしまった
らしいです。
- No.3351 -
このTreeへ
コメント元:3350 へ
[リストへもどる]
pre
(3344)
3352:
Re^6: SD,CF,ATA ベンチマーク
投稿者:
文太
2008/10/24(金) 17:02
3351 番 としき さんへのコメント コメント数 1
としきさん
所期の目的は達したので、深追いなくていいのですが…。
> 環境変数をセットする set というコマンドがあります。
> 新しいOSでは、このコマンドが随分と拡張されているらしいです。
> それこそ、任意のフォーマットで日時を設定できるくらい。
えーと、でも、setコマンドが日時データを取得できるわけではないですよね。
> この辺の技術を使うと、以下のようなバッチファイルが書けるらしい。
> set starttime=%d%t
set starttime=%d%%t%
みたく、%環境変数%でなく???(こんな文字列の連結みたいのは駄目でした。)
>echo %vzsym%
は効いたけど…。
『ポケットリファレンス』にはないみたいです。
でも、「ver | time」は、たいへん気に入りました。
- No.3352 -
このTreeへ
コメント元:3351 へ
[リストへもどる]
pre
(3344)
3353:
Re^7: SD,CF,ATA ベンチマーク
投稿者:
としき
2008/10/24(金) 19:41
参照先:http://toshiki.la.coocan.jp/
3352 番 文太 さんへのコメント コメント数 1
> えーと、でも、setコマンドが日時データを取得できるわけではないですよね。
それが、できるらしいのです。
setコマンドを実行した日時、が使えるらしいとの事。
これもまた例によって、command.comとcmd.exeで結果が異なるかもしれません。
ヘルプメッセージでお調べください。
#今日は週休日だったので、会社のマシンで調べておく事ができませんでした。
- No.3353 -
このTreeへ
コメント元:3352 へ
[リストへもどる]
pre
(3344)
3354:
Re^8: SD,CF,ATA ベンチマーク
投稿者:
文太
2008/10/24(金) 20:58
3353 番 としき さんへのコメント コメント数 1
set %TIME% のようでした。純粋cmd.exe窓で、>set /?したら、長〜いヘルプ
メッセージが出ましたが、Vz窓から使えそうもないのと、以下が必要みたい
なので撤退。興味のある方、どうぞ。
たぶん、この「コマンド拡張機能」が必要。うちでは以下をしていないせいなの
でしょう、怒られて、結果を出してくれなかった。ver |timeでいいですぅ。
ttp://journal.mycom.co.jp/column/winxp/095/index.htmlより。
コマンド拡張機能の影響を受けるコマンドを数え上げると、 DEL/ERASE/CD/MD/
PROMPT ……とかなりの数となるため、Windows XP 下でコマンドプロンプトを活
用するユーザにとって、実は重要な設定ポイントと言えるでしょう。そこで今週
は、コマンドプロンプトのコマンド拡張機能の設定を確認する Tips を紹介しま
しょう。
1.<スタート>メニュー→<ファイル名を指定して実行>と選択。
2.「名前」に半角で「regedit」と入力し、<OK>ボタンをクリック。
3.「レジストリエディタ」が起動したら、HKEY_LOCAL_MACHINE→ Software
→ Microsoft→ Command Processorとキーをたどって開く。
4.右ウィンドウにある「EnableExtensions」をダブルクリックで開く(ない場合
は<編集>メニュー→<新規>→<DWORD値>と選択し、名前を「EnableExtensions」
に変更する)。
5.「値のデータ」を「1」に書き換えて<OK>ボタンをクリック(初期設定では「1」
となっています)。
6.レジストリエディタを終了し、Windows XPを再起動する。
この手順で Windows XP 全体でコマンド拡張機能が有効になり、ステップ 5 の
値を「0」に変更することで同機能が無効になります。 ちなみにログオンするユ
ーザのみ設定する場合は、ステップ 3 のレジストリキーを「HKEY_CURRENT_USER\
Software\Microsoft\Command Processor」に読み替えてください。
- No.3354 -
このTreeへ
コメント元:3353 へ
[リストへもどる]
pre
(3344)
3363:
Re^9: SD,CF,ATA ベンチマーク
投稿者:
としき
2008/10/27(月) 02:07
参照先:http://toshiki.la.coocan.jp/
3354 番 文太 さんへのコメント コメント数 1
26日は出勤日でしたので、会社のマシンで色々と実験してみる予定でした。
が、多忙のため、結局あまりいろいろと試せず。
午前中は割とまったりとしていたのですが、休みだった数日間で溜ったメールの
処理に追われ、午後からは本業に追われ。まさか4時間も残業する羽目になると
は思わなかった。
それでも、少しは試せた事もあって。
> たぶん、この「コマンド拡張機能」が必要。うちでは以下をしていないせいなの
コマンド拡張機能を使うだけであれば、レジストリの書き換えは不要です。
cmd.exe のオプションで指定するだけです。詳細は cmd /? でどうぞ。
例えば、バッチファイルで、command /c hogehoge という構文は頻繁に使います
よね?
これと同じような感じで cmd.exe も使う事ができるらしいです。
って言っても、実はここだけ、チョイ自信なし。
この時、cmd.exe の引数としてバッチファイルを指定すれば、その中では当然、
コマンド拡張機能が使用可能。もちろん、同時に、拡張機能を使用するという
オプションも指定してやらねばなりませんが。
ただ、これ、自分で試しているわけではないので、どのような結果になるかは
不明です。普通に考えると、コンソールファイルに取得する事は全く不可能で
しょうね。とりあえず、XPの常駐Vzのコマンドラインでcmd.exeと叩いて常駐
させて、何もコマンドを実行せずにすぐにexitで脱出する、ということだけは
試しました。特に問題なくcommand.comに帰ってこれることは確認済みです。
で、コマンド拡張機能が使えるとどうなるか。
> set %TIME% のようでした。純粋cmd.exe窓で、>set /?したら、長〜いヘルプ
長〜いヘルプの、比較的上の方に出てくるはずですが、極めて興味深い記述があ
るはずです。会社から自宅に帰ってくるまでに3歩以上歩く必要があったために
構文は忘れてしまいましたが、環境変数の値の取出しの際に、文字列処理という
か、何文字目から何文字取り出す、という指定ができるのです。つまり、時刻を
表す環境変数の4文字目から2文字を取り出す、という指定ができます。すると、
例えば時刻が「14:53」だった場合、set mm=%time:4:2%(これは嘘っぱちかも)
みたいな指定をすると、mmという環境変数には「53」という文字列が代入される、
という寸法。
あ〜、でも、時刻の表示形式で秒まで表示させるという事は可能なのかな。
Win2Kのころは、コントロールパネルの地域の設定の中に日付や時刻の表示形式を
変更する部分があって、そこを変更したらDOS窓での表示形式も変わったよう
な記憶があるのですが、もはや忘却の彼方。
- No.3363 -
このTreeへ
コメント元:3354 へ
[リストへもどる]
pre
(3344)
3365:
set /? (159行)
投稿者:
文太
2008/10/27(月) 15:12
3363 番 としき さんへのコメント コメント数 1
cmd.exe 環境変数を表示、設定、または削除します。
SET [変数名=[文字列]]
変数名 環境変数名を指定します。
文字列 変数に割り当てる文字列を指定します。
現在の環境変数を表示するには、パラメータを指定せずに SET と入力してください。
コマンド拡張機能を有効にすると、SET は、次のように変更されます:
等号や値を指定せずに、変数名だけを指定して SET コマンドを実行すると、
SET コマンドに指定された名前に接頭辞が一致するすべての変数の値が
表示されます。たとえば、
SET P
と入力すると、文字 'P' で始まるすべての変数が表示されます。
変数名が現在の環境に見つからない場合は、SET コマンドは、ERRORLEVEL を
1 に設定します。
SET コマンドでは、変数の名前に等符号を使用することはできません。
SET コマンドには、2 つの新しいスイッチが追加されています:
SET /A 式
SET /P 変数=[プロンプト文字列]
/A スイッチは、等号の右側の文字列が、評価すべき数式であることを
指定します。式の評価はごく単純で、次の操作がサポートされます。
操作は、優先順位の高い順に示されています:
() - グループ化
! ~ - - 単項演算子
* / % - 算術演算子
+ - - 算術演算子
<< >> - 論理シフト
& - ビット演算子 AND
^ - ビット演算子排他的 OR
| - ビット演算子 OR
= *= /= %= += -= - 代入
&= ^= |= <<= >>=
, - 式の区切り記号
論理演算子またはモジュール演算子を使う場合は、式文字列を引用符で
囲む必要があります。式内の数値以外の文字列は環境変数文字列として
処理され、使用される前に数値に変換されます。指定された環境変数名が
現在の環境で定義されていない場合は、値として 0 が使用されます。
これにより、いくつもの % 記号を入力して値を取得しないでも、環境
変数の値を算術演算に使うことができます。
コマンド スクリプト外でコマンド ラインから SET /A を実行すると、式の
最終的な値が表示されます。割り当て演算子を使うには、割り当て演算子
の左側に環境変数名が必要です。数値は 10 進数ですが、接頭辞として 0x
を付けると 16 進数、0 を付けると 8 進数になります。従って、0x12 は 18、
あるいは 022 と同じです。8 進表記を使う場合は、注意してください。08 や
09 は、8 と 9 が有効な 8 進数ではないため、有効な数値ではありません。
/P はユーザーによって入力された入力行を変数の値として設定できるようにします。
入力行を読み取る前に、指定されたプロンプト文字列を表示します。プロンプト文
字列は空でもかまいません。
環境変数の置換は、次のように拡張されます:
%PATH:文字列1=文字列2%
は、PATH 環境変数を展開し、その結果に含まれるすべての "文字列1" を
"文字列2" に置き換えます。"文字列2" に空の文字列を指定すると、展開
された出力からすべての "文字列1" を削除することができます。"文字列1"
をアスタリスクで始め、展開された出力の先頭から、文字列1 の残りの部分
が最初に現れるまでのすべてを一致させることもできます。
また、展開の副文字列を指定することもできます。
%PATH:~10,5%
は、PATH 環境変数を展開し、展開結果の 11 番目 (オフセット 10) の文字
から始まる 5 文字だけを使います。長さが指定されなかった場合は、変数の
値の残りの長さを既定値とします。オフセットまたは長さのどちらかが負の値
の場合、環境変数の値の長さに指定されたオフセットまたは長さを足してその
数を使います。
%PATH:~-10%
は、パス変数の最後の10 文字が展開されます。
%PATH:~0,-2%
は最後の 2 文字以外のすべてが展開されます。
最後に、遅延環境変数の展開が追加されました。このサポートは常に既定で
無効になっていますが、CMD.EXE の /V: のコマンド ライン スイッチを使
って有効または無効にできます。CMD /? を参照してください。
遅延環境変数の展開は、実行時ではなく、テキスト行を読み取るときに展開
されるという現在の制限を避けるために役立ちます。
次の例は即時変数展開の問題を説明しています。
set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "%VAR%" == "after" @echo If you see this, it worked
)
この例は、論理的には IF 文が別の IF 文の本体に含まれる複合文なので、
両方の IF 文の %VAR% が、最初の IF 文を読み取ったときに展開されます。
このため、メッセージは決して表示されません。複合文の中の IF では "before"
と "after" が比較され、決して等しくはなりません。同様に次の例も期待し
たようには動作しません。
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
この例では、現在のディレクトリのファイルの一覧は作成されず、代わりに最後
に見つけられたファイルが LIST 変数に設定されます。これは %LIST% が FOR 文
が読み取られるとき、一度だけ展開され、そのときは LIST 変数は、空だからです。
つまり、実際に実行されている FOR ループは
for %i in (*) do set LIST= %i
で、LIST に最後にみつけられたファイルを設定し続けているだけです。
遅延環境変数の展開では、実行時に環境変数を展開するために異なった文字
(感嘆符)を使うことができます。遅延環境変数の展開が有効な場合、上記の
例は次のように書くと意図したように動作します。
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
コマンド拡張機能が有効な場合、SET によって表示される変数の一覧には
現れないいくつかの動的な環境変数があります。これらの変数の値は、変数の
値が展開されるときに動的に計算されます。ユーザーがこれらの名前の変数を
明示的に定義する場合、その定義は下記の動的な定義を無効にします。
%CD% - 現在のディレクトリ文字列に展開します。
%DATE% - DATE コマンドと同じフォーマットで現在の日付に展開します。
%TIME% - TIME コマンドと同じフォーマットで現在の時刻に展開します。
%RANDOM% - 0 から 32767 の間の任意の 10 進数に展開します
%ERRORLEVEL% - 現在の ERRORLEVEL の値に展開します。
%CMDEXTVERSION% - 現在のコマンド プロセッサ拡張機能のバージョン番号に
展開します。
%CMDCMDLINE% - コマンド プロセッサを起動したオリジナル コマンドライン
に展開します。
- No.3365 -
このTreeへ
コメント元:3363 へ
[リストへもどる]
pre
(3344)
3366:
cmd /? (167行)
投稿者:
文太
2008/10/27(月) 15:13
3365 番 文太 さんへのコメント
Windows XP コマンド インタープリタの新しいインスタンスを開始します。
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] 文字列]
/C "文字列" に指定されたコマンドを実行した後、終了します。
/K "文字列" に指定されたコマンドを実行しますが、終了しません。
/S /C または /K の後の文字列の扱いを変更します (以下の説明を参照してくだ
さい)。
/Q エコーをオフにします。
/D レジストリからの AutoRun コマンドの実行を無効にします
(下記を参照してください)。
/A 内部コマンドの出力結果を ANSI でパイプまたはファイルに出力します。
/U 内部コマンドの出力結果を Unicode でパイプまたはファイルに出力します。
/T:fg 前景色および背景色を設定します (詳細は COLOR /? を参照してください)。
/E:ON コマンド拡張機能を有効にします (以下の説明を参照してください)。
/E:OFF コマンド拡張機能を無効にします (以下の説明を参照してください)。
/F:ON ファイル名およびディレクトリ名補完文字を有効にします
(以下の説明を参照してください)。
/F:OFF ファイルおよびディレクトリ名補完文字を無効にします
(以下の説明を参照してください)。
/V:ON 区切り文字として ! を使って遅延環境変数の展開を有効にします。
たとえば、 /V:ON とすると、!var! は、実行時に変数 var を展開します。
var 構文は、FOR ループ中とは違い、入力時に変数を展開します。
/V:OFF 遅延環境展開を無効にします。
コマンド セパレータ '&&' で区切られた複数のコマンドが引用符で囲まれている場合
は、"文字列" として指定されます。また互換性の理由から /X と /E:ON、/Y と
/E:OFF、および /R と /C は同じです。そのほかのスイッチは無視されます。
/C または /K が指定されている場合、スイッチの後の残りのコマンド ラインがコマ
ンド ラインとして処理されます。次のルールが引用符 (") の処理に使われます:
1. 次のすべての条件に一致する場合、コマンド ラインの引用符が有効になり
ます:
- /S スイッチがない
- 引用符が 1 組ある
- 引用符の中に特殊文字がない
(特殊文字は &<>()@^| です)
- 引用符の中に 1 つ以上のスペースがある
- 引用符の中の文字列が、実行可能ファイルの名前である
2. 最初の文字が引用符であるにも関わらず上の条件に一致しない場合は、最初
の引用符とコマンド ラインの最後の引用符が削除され、最後の引用符のあ
とのテキストが有効になります。
コマンド ラインで /D が指定されなかった場合は、CMD.EXE の開始時に次の REG_SZ
または REG_EXPAND_SZ レジストリ変数が検索されます。次のレジストリ変数の両方ま
たはどちらかが存在する場合、それらを最初に実行します。
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun
既定では、コマンド拡張機能は有効です。拡張機能を無効にして CMD.EXE を起動する
には、/E:OFF スイッチを使用します。コンピュータまたはユーザー ログオン セッ
ションで起動される CMD.EXE コマンドすべてに対して拡張機能を有効または無効に
するには、 REGEDIT32.EXE を使ってレジストリにある次の REG_DWORD 値を設定しま
す。
コンピュータに対しては、
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions
に 0x1 を設定すると有効になり、0x0 を設定すると無効になります。
ログオン セッションに対しては、
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions
に 0x1 を設定すると有効になり、 0x0 を設定すると無効になります。
ユーザー固有の設定は、コンピュータの設定より優先されます。
コマンド ライン スイッチは、レジストリの設定より優先されます。
コマンド拡張機能には、次のコマンドに対する変更または追加が含まれています。
DEL または ERASE
COLOR
CD または CHDIR
MD または MKDIR
PROMPT
PUSHD
POPD
SET
SETLOCAL
ENDLOCAL
IF
FOR
CALL
SHIFT
GOTO
START (外部コマンドの起動の変更を含みます)
ASSOC
FTYPE
詳細は、コマンド名の後に /? と入力すると表示されるヘルプを参照してください。
既定では、遅延環境変数の展開は有効ではありません。遅延環境変数の展開を有効また
は無効にして CMD.EXE を起動するには、/V:ON または /V:OFF スイッチを使います。
コンピュータまたはログオン セッションで起動される CMD.EXE コマンドすべてに対し
て補完を有効または無効にするには、REGEDIT32.EXE を使ってレジストリにある次の
REG_DWORD 値を設定します。
コンピュータに対しては、
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion
に 0x1 を設定すると有効になり、0x0 を設定すると無効になります。
ユーザー ログオン セッションに対しては、
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion
に 0x1 を設定すると有効になり、0x0 を設定すると無効になります。
ユーザー固有の設定は、コンピュータの設定より優先されます。
コマンド ライン スイッチは、レジストリの設定より優先されます。
遅延環境変数の展開が有効になっている場合、感嘆符を使うと実行時に環境変数の
値を置き換えることができます。
既定では、ファイルおよびディレクトリ名補完機能は有効ではありません。ファイル
名の補完機能を有効または無効にして CMD.EXE を起動するには、/F:ON または /F:OFF
スイッチを使います。コンピュータまたはログオン セッションで起動される CMD.EXE
コマンドすべてに対して補完機能を有効または無効にするには、REGEDIT32.EXE を使っ
てレジストリにある次の REG_DWORD 値を設定します。
コンピュータに対しては、
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar
に特定の機能に使う 16 進の制御文字を設定します (例 0x4 は Ctrl-D、0x6 は
Ctrl-F)。
ユーザー ログオン セッションに対しては、
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar
に特定の機能に使う 16 進の制御文字を指定します (例: 0x4 は Ctrl-D、0x6 は
Ctrl-F)。
ユーザー固有の設定は、コンピュータの設定より優先されます。
コマンド ライン スイッチは、レジストリの設定より優先されます。
/F:ON スイッチで補完機能を有効にした場合、2 つの制御文字 (Ctrl-D はディレクト
リ名補完機能、Ctrl-F はファイル名補完機能) が使用されます。
レジストリで特定の補完文字を無効にするには、制御文字として有効でないスペース
(0x20) の値を使用します。
2 つの制御文字のどちらかを入力すると、補完機能が起動されます。パスが存在しな
い場合、プログラムはカーソルの左側のパス文字列にワイルド カード文字を付加し、
一致するパスの一覧を作成します。その後一致する最初のパスを表示します。
パスが一致しない場合、音を鳴らします。同じ制御文字を押し続けると一致するパス
の一覧を順に表示します。Shift キーを押しながら制御文字を押すと一覧を逆回り表
示します。行を編集して制御文字をもう一度押すと、保存されていた一致したパスの
一覧は破棄され、新しい一覧が作成されます。ファイル名補完機能とディレクトリ名
補完機能を切り替えたときも同様です。2 つの制御文字の違いは、ディレクトリ補完
文字がディレクトリ名だけを照合するのに対し、ファイル名補完文字はファイルと
ディレクトリ名の両方を照合する点です。ファイル補完機能が内部ディレクトリコマ
ンド (CD、MD または RD) に使用された場合、ディレクトリ補完機能と見なされま
す。
一致するパスの前後に引用符を付けると、補完機能コードでスペースまたはほかの特
別な文字を含むファイル名が使用できるようになります。また、行の前に戻って補完
機能を起動した場合、補完機能が呼び出された時点でカーソルの右側にあったテキス
トは破棄されます。
引用符が必要な特別な文字は次のとおりです:
<スペース>
&()[]{}^=;!'+,`~
- No.3366 -
このTreeへ
コメント元:3365 へ
[リストへもどる]
pre