- ベストアンサー
DOSコマンドについて
DOSコマンドで下記の2つを実現したくて色々と 調べてみたのですがわかりませんでした。 (1)バッチファイルを実行したら、DOSプロンプトの 画面が立ち上がり、検索したい文字を入力できる 状態にする。 (2) (1)で入力された文字列が2文字以上だった場合は エラーメッセージを表示し、再度入力させる。 (3)(1)で入力した文字列を任意のファイル内で検索し、 あれば大文字⇒小文字に変換する。 echoとpromptというコマンドを使って入力画面を 表示させることができるのかと思いましたが なかなかうまくいかない状態でした。 何か参考になるサイトがあれば教えて頂ければ幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。#1に書いたとおり動くコードを書くまで考えるのは面倒なので、(3)は方針だけ。 (1)(2) :loop set /p VAR="英字1文字だけ入力:" echo "%VAR%">tmp.txt for %%F in (tmp.txt) do if %%~zF NEQ 5 echo 1文字でない&goto loop tmp.txt に読み込んだ文字と引用符2文字と改行コード2バイトを書き込んで、ファイル長が5なら読んだ文字が1文字だとわかります。 (3) 入力した %VAR% は大文字か小文字かわからないので、小文字に変換します。 set %VAR%=%VAR:A=a% set %VAR%=%VAR:B=b% をZまで並べれば、%VAR%の文字は小文字になります。ここでやった文字列置き換え方法については、set /? を参照。 そこには書かれていませんが、置換元の文字は大文字・小文字が区別されません。 つまり、set DATA=%DATA:a=a% は、DATA中のAをaに置き換えます。 ファイルから文字列を読むには for /f を使います。詳しくは for /? 参照。 %LINE% にファイルから読んだ行が入っているとして、遅延環境変数展開(意味は set /? 参照)を有効にして、 set LINE=!LINE:%VAR%=%VAR%! で、先ほど書いたように行中の大文字が小文字に変換されます。 それを echo %LINE%>>fileout.txt 等とファイルに書けばOK。 あと、考慮すべきなのは最初に英字でなく特殊記号が入力されると後段でエラーになるケースがあるので、英字であることを確認したほうがいいかもしれません。 for /? と set /? と setlocal /? を読んで上記が理解できなければ、VBScript + WSH を勉強したほうがいいでしょう。上記のようなことを書いた書籍はありませんが、VBScriptの入門書は何冊も出ています。WSHのことが書いてあるものを選んでください。
その他の回答 (2)
- kamkamkam3
- ベストアンサー率42% (216/514)
(1)について set /p VARIABLE= 文字を入力してください: この構文はset命令で環境変数VARIABLEに値を指定します。/pオプションをつけることにより、「文字を入力してください」の部分がプロンプトに表示されます。 (2)について 環境変数の長さを調べるのはバッチコマンドでは基本的には無理みたいです。やり方を調べたのですが、載ってませんでした。 (3)について バッチコマンドはファイルの書き込みができません。#1様と同様の答えになりますが、VBScriptもしくはJScriptをお使いになった方が良いと思います。 JScript、VBScript、WindowsScriptingHostの本を調べると良いと思います。ちなみに最後の名前の長いやつはバッチコマンドの拡張版としてJScript、VBScriptを使うための仕組みというかプログラムです。それをつかってファイルの書き込みができるようになります。
- notnot
- ベストアンサー率47% (4900/10358)
DOSコマンドでは無理ですね。 Windows2000やXPであれば(1)(2)は可能です。ただ(3)が無理ではないものの非常に困難。 VBScriptの使用を考えるほうがいいと思います。
補足
ご回答ありがとうございます。 ちなみにWindowsXPを使っているのですが、どういう方法があるのでしょうか。 ご指導いただければ助かります。