• ベストアンサー

バッチコマンドを作りたい

MS-DOSでのバッチコマンドについての質問です。 パスを引数で指定して、そのパスのディレクトリ以下(サブディレクトリも含む)のファイル名を全て取得し、加工して表示するバッチを作りたいのですが・・。 例えばコマンド名を jcm をすると C:\>jcm C:\temp と入力すると(「C:\temp」は引数)、C:\temp以下(サブフォルダも含めて)にある全てのファイル名を取得し、ファイル名がA.txt,B.txtだったとすると java A.txt java B.txt のように加工して表示したのです。 バッチファイルの中身はどのように記述すればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • craftsman
  • ベストアンサー率49% (166/336)
回答No.2

 バッチファイルは、コマンドラインでの使用を前提にしているコマンドを繋ぎ合わせ、簡単な制御構造を与えるものです。  Windowsに標準添付のコマンドだけでは無理っぽいです。  Windowsでファイル名の一覧を取得するには、cmd.exeのDIRコマンドを使用する訳ですが、そのままバッチファイルだけで加工できるような形式では出力されません。  よって、DIRコマンドの出力をリダイレクトして、文字列に何らかの編集を加えるコマンドを用意する必要があります。  このような用途に向いている汎用コマンドとしては、sed.exeやawk.exeが扱いやすくて良さそうです。  Vectorを「sed」「awk」をキーワードにサーチすれば幾つも引っ掛かると思います。  それらの応用については、webをサーチして見て下さい。  あるいは・・・。  WindowsにはWSH(Windows Scripting Host)がありますよね。  WSHには、VBScriptとJAVAScriptの二つのインタプリタが標準添付されています。  特にVBScriptは、アプリケーションソフトウエア開発環境であるVB(Visual Basic)に匹敵するような高度な処理能力を持った言語なので、これを使ってバッチ処理を行う、あるいはバッチファイル中で使用できるようなコマンドを作成してしまうと言う手もあります。

参考URL:
http://www.vector.co.jp/
masa1214
質問者

お礼

参考になりました。ありがとうございます。

その他の回答 (2)

  • Spur
  • ベストアンサー率25% (453/1783)
回答No.3

冒頭に固定文字「java」をつけるには工夫を要しますが、 ファイル名の一覧を出すだけなら、次の1行です。 dir /b %1 ただし、瞬間的に画面に表示されてすぐに消えますよ。 リダイレクトでファイルに落とすなどをしてください。

masa1214
質問者

お礼

参考になりました。ありがとうございます。

  • timber
  • ベストアンサー率29% (218/739)
回答No.1

過去にほとんど同じ質問に回答していますので そちら(参考URL)をご覧ください。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=399828

関連するQ&A

  • バッチのcopy

    フロッピーのサブディレクトリへのファイルコピーで、コピー先のファイル名を指定しないと、コピー先ディレクトリが間違っているといわれます。 a:\tempは既存フォルダです。 @echo off copy C:\WINDOWS\デスクトップ\1.txt a:\ copy C:\WINDOWS\デスクトップ\2.txt a:\temp\ これでは2.txtがコピーできないので copy C:\WINDOWS\デスクトップ\2.txt a:\temp\2.txt のようにしなくてはなりません。 コピー先のファイル名を指定せずにコピーする方法がありましたら教えてください。

  • コマンドプロンプト、バッチファイル

    解決法を探してみたのですが、見つからないのでご教授ください。 コマンドプロンプトでどんなコマンド(ipconfig,ping,etc)を入力しても 「操作可能なプログラムまたはバッチ ファイルとして認識されていません。」という警告が出るようになってしまいました。 多分、原因はJavaの勉強をしていたときに環境変数のパスをいじってしまったからだと思います。 調べていて、思ったことなのですが、カレントディレクトリにバッチファイル(.bat)というファイルが見当たりません。これがないからかなとも思っています。 コマンドプロンプトからのコマンド入力ができるように解決方法をご教授ください。

  • ファイルを移動するためのバッチファイル

    テキストファイル(1行に1つのファイル名が書かれていて、ファイルの数だけの行があるテキスト)を読み込み それをもとに、パス指定した参照先ディレクトリより、1つずつファイルを取得し、 パス指定した保存先ディレクトリに保存していくという、ファイルを移動(コピー)するためのバッチファイルを作りたいのですが どのようなコマンドを記述すればよいでしょうか? (できれば、MS-DOSのバッチファイルだと助かります) 例 [list.txt] aaaaa bbbbb eeeee [参照先] aaaaa bbbbb ccccc ddddd eeeee ↓ [保存先] aaaaa bbbbb eeeee

  • バッチファイル 文字列操作のやり方

    お世話になります。 バッチファイルのコマンドについてですが、 for文の中で 一番下の階層のファイル名の先頭5バイトが "abcde"のものだけ処理対象にしたいと考えています。 例えば、 C:\tempに以下のファイルがあったら C:\temp\abcdefg.txt    ・・・(1) C:\temp\xxxxxxx.txt    ・・・(2) C:\temp\abcde.txt    ・・・(3) C:\temp\abc.txt    ・・・(4) C:\temp\abcdezzzz.txt    ・・・(5) (1)、(3)、(5)だけを処理させたいと考えています。 実装方法として、以下を考えましたがうまくいきません。 dir /s /b /a-d C\Temp > file.txt for /f "delims=" %%F in (file.txt) do ( set A=%%~nF% if "%%A:~0,5%"=="abcde" ( <処理コマンド> ) ) おそらくfor文の中で何個も命令を記述できないということと、 パラメータ修飾子の指定が間違っているからだと思われますが、 うまくできない理由を知りたいです。 よろしくお願いいたします。

  • コマンドプロンプトのコマンドについてなんですが。

    こんにちわ。仕事で使っているソフトでなんですが、バッチファイルを 利用して、各機能を動かしているようです。(僕はバッチファイルの プログラムはわかりません)中身を見ると、cdhというのを多用しています。 いろいろ調べたのですが、cdはディレクトリの変更用コマンドで理解 できたのですが、cdhというコマンドはありませんでした。実際に コマンドプロンプトでやってみると、特定のディレクトリに行くことが わかりました。環境変数かと思い、見てみると、そのディレクトリの パスがありましたが、変数名はRPHOMEで内容がそのパスです。 さらに、これをどこかでcdhかhに当てはめていると思うのですが、 それはどこで指定されているのでしょうか? 勝手に思いこんでいるのですが、ご指摘、アドバイスの方よろしくお願い致します<(_ _)>

  • バッチファイル テキストファイル内の最後の\以下を削除したい

    バッチで、あるテキストファイル内の最後の\以下を削除して、その結果をバッチの値として利用したいです。 ●テスト条件 %TEMP%のtest.txt に以下のテキスト。 C:\Program Files\software\top xyz ●求める結果: 行末から最初の\以下の文字列を削除。この文字列をバッチファイルで使いたい。 C:\Program Files\software\ ●試したコマンド: なし 全体の流れとしては、バッチでquery取得したパスの不要な部分を削除して、求まったパス(のdirの結果を出力するために)を再度バッチで利用したいです。適切なコマンド・方法がありましたらお願いいたします。

  • FTPのバッチファイルで日付を引数で与えたい

    いつもお世話になっております。 FTPのバッチファイルに引数を与える良い方法をご存知ありませんか。 FTPの中では環境変数は使えないとのことですし、悩んでいます。 取得するファイルは日付毎のディレクトリに入っていて、取得後も日付毎のディレクトリに保管するので日付の指定が必要なのですが。 [ftpget.bat]------------------------------------------ ftp-s:ftpget.bat open ホスト名 ユーザー名 パスワード bin prompt cd /~対象ホストのディレクトリ~/YYYYMMDD/host1 !mkdir C:\YYYYMMDD lcd C:\YYYYMMDD mget *.txt quit ---------------------------------------------------- このYYYYMMDDの部分を、『ftpget.bat 20081125』のようにバッチを流す時の引数で与えたいです。 日付は3日前だったり昨日だったり今日だったりします。 今は直接ファイルを編集してYYYYMMDDの部分3箇所を手で直してからバッチファイルを叩いています。 よろしくお願いいたします。

  • バッチでファイルの読み込み

    Windowsバッチでファイルの読み込みをしようと思っているのですが、 下記コマンドの実行で「ファイルが見つかりません」となります。 ※パスにスペースを含むのでusebackqを使用しました。 FOR /F "usebackq tokens=1,2 delims= " %%i in ("c:\temp 1\data.txt") DO echo %%i WindowsServer2003でうまくいかなかったのですが、 Xpですれば問題なくファイルを読み込めました。 何か差があるのでしょうか?

  • ファイルのバッチ処理について

    バッチ処理を勉強しているところです。 ひとつの問題が解決できていないので、わかるひとは教えて もらえませんか? C:\bom.txtがあって、C:\temp\a.txtとC:\temp\d.txt, C:\temp\a\a.txt と C:¥temp\b\e.txtもあります。 for でC:\bom.txtファイルとほかのファイルと再帰的に結合して、 ファイル名はそのままにしたいですが、 @set bomfilepath=C:\ 考えているバッチは以下のようになるが、失敗しました。 for /R %1 %%f in (*.*) do @( @rem echo %%f call copy /B %bomfilepath%bom.txt+%%f %%ftemp call del /Q %%f ren %%ftemp %%f ) 原因はどこですか?

  • コマンドプロンプトのバッチについて

    test01.bat >> YYMMDD結果.txt コマンドプロンプトのバッチ処理を実行結果をテキストで保存したいのですが、ファイル名を、 「YYMMDD結果.txt」と"YYMMDD"に本日の日にちを入れたいのですが、どのようにすればよいのでしょうか?