
DOS画面への入り方? わからない方は→DOS窓探検へ 行ってらっしゃい。
→お帰りなさい。
では いきなりバッチファイルの例からやりましょう。
下の青い部分をコピーしてエディターに貼り付けて名前をつけて保存(bat.bat)してください。
そして、実行は XXXX>bat 拡張しはいりません。
たった2行のコマンドです。 拡張子を .bat とすることで .exe .com などと並んでアプリケーションに仲間入りし、実行されるコマンドに生まれ変わります。
最早(もはや)単なるテキストファイルではありません。
@echo off dir /b *.bat
こんな画面結果になるかと思います。この例は、DOSコマンド Subst を使って仮想ドライブp:に入れた自作バッチファイル一覧を表示させたところです。
@echo off
if "%1"=="" goto usage
dir %1 /s /b
goto end
:usage
echo --------------------------------------
echo p.091
echo 引数のファイルをフルパスで出力します。
echo * や ?のワイルドカードも使えます。
echo dir "引数" /s /b
echo -------------------------2004.20.11---
:end
Windowsの検索機能は、高級化した分操作が複雑で、時間がかかってちょっと不備な条件設定でヒットしないこともあります。
そこでこのバッチ作ってみることとなったものです。意外に便利でよく使っています。
XXX>Whereis *.bat
このバッチファイル自身を忘れた時は、whereis と引数なしで入力すると、:usage
の行へジャンプしてその機能を表示するようにしてあります。
引数がついていれば、if 文 の次の行を実行して終わったら :end へ飛んで終了です。

履歴を残すためにファイル名の頭に $~ の記号がついたファイルが沢山できて、煩わしくなる時があります。
「これ全部いらないな!」ということで一気に全部削除したいなんて時にコマンドプロンプトで、
C:\>del $~* /S
と打ち込むと以下のように削除したファイルを表示しながらそのフォルダー内のファイルを削除してくれます。
C:\>del $~* /S 削除したファイル - C:\B\batch140\$~CALLTEST.BAT 削除したファイル - C:\DownLoaded\cliplog\log\$~041214.txt 削除したファイル - C:\MS-DOS\note210v\$~note.cfg 削除したファイル - C:\Perl_CGI_辞典\PerlCGI_ch7_sample\17_calendar\$~cal
バッチファイルの途中で中止するには、^C(Ctrlキーを押しながらC)ですよ。
これが確認できたら、バッチファイル化しておいた方が、後で記憶を辿るより、簡単です。つまり覚えやすいように別のなまえに書き換えておくのと同じことです。
delhist.bat
@echo off del $~* /S
ただし、これですといきなり削除作業が始まって、不安になります。ですので、単に
delhist(またはdelhist /?) と打ち込んだ時はその使い方と機能を表示するようにしておいた方が、親切です。
@echo off
if "%1"=="" goto Info
if "%1"=="/?" goto Info
パソコン付属のCD-ROMドライバーの容量は、数十ギガの時代になって、サブディレクトリの数、(いや今ではフォルダと言わないと通じないかもしれませんが。)がとても覚えきれるものではありませんで、
C:\>tree
なんてコマンドプロンプトからやれば、解ることはわかるのですが、ここではもっと簡単にバッチファイルでやれることをご紹介します。
@echo off
:start
if "%1" == "" goto Info
if "%1" == "/?" goto Info
if "%1" == "/s" goto SaveText
if "%1" == "/S" goto SaveText
if "%1" == "/r" goto Screen
if "%1" == "R" goto Screen
:Info
echo ☆☆☆ フォルダ検索(DRO.bat) 2004.11 ☆☆☆
echo 第1引数 /S (or /s) = c:\dro.txt に保存
echo /R (or /r) = 画面表示
echo ナシ (or /?) = 使い方表示
echo 第2引数 現在のドライブ名('\'はつけない。)
echo スペースを含む時は、""で囲む。
echo ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
goto End
:SaveText
dir %2\*.* | find "<" | sort > c:\dro.txt
echo C:の DRO.txt に保存。
goto End
:Screen
dir %2\*.* | find "<" | sort
echo 以上です。
goto End
:End
半角の<をFindさせて更にソートさせます。
結果は、次のようになります。

バッチでメニュー画面を作って選択できるようにするためには、どうしてもMD-DOS時代のChoiceコマンドが必要になります。しかしWindows
XP では、Choice コマンドが使えなくなくなってしまいました。少なくとも私のXPでは。
代替コマンドとか、何か別の方法があるはずと信じて探し回って、やっと見つかりました。
これは先々必要になるのでここに説明しておきます。
Microsoft社のサイトからです。英文でしたがコマンド関係の専門用語は、私たち日本人にも馴染みが深いのでなんとか解読してみましたのでご紹介します。
でも以前 Windows 95 98 時代の Choice コマンドのように簡便ではありません。以下にその例
menu.bat で紹介します。
直接そのサイトを見たい方は、
http://www.computerhope.com/sethlp.htm
新しいという感じでありながら、簡便ではなくなったという部分、 %path:~10,5% の意味をよく理解してください。
%PATH:~10,5% は、
PATH 環境変数を展開し、展開結果の 11 番目 (オフセット 10) の文字から始まる 5 文字だけを使います。
Choice も同じで、以下の例の中の set choice=%choice:~0,1% の部分がそれで、オフセット
しないで 1文字を
choice に代入しています。
@ECHO off cls :start ECHO. ECHO 1. Print Hello ECHO 2. Print Bye ECHO 3. Print Test set choice= set /p choice=Type the number to print text. if not '%choice%'=='' set choice=%choice:~0,1% if '%choice%'=='1' goto hello if '%choice%'=='2' goto bye if '%choice%'=='3' goto test ECHO "%choice%" is not valid please try again ECHO. goto start :hello ECHO HELLO goto end :bye ECHO BYE goto end :test ECHO TEST goto end :end
となります。そして入力待ちしてしている状態です。
それにしても Microsoft 社は、なぜ Choice コマンドを XP で使えないようにしてしまったのでしょうか。
私には、今のところ解りません。
subst を使います。
1) わからない時は、subst /? 下の画面が出てきます。
2) p:ドライブとは実際にはないドライブですが subust p: c:\p とやって仮想ドライブが作れます。
3) 設定してある仮想ドライブは、 subst だけで引数をつけないと画面の下の2行
これで、XXX>P: とやるとあたかもP:ドライブがあるように機能します。
4) 廃止する場合は、XXX>subst p: /D

End of Page.