DOSのバッチファイルでのヒアドキュメントとは?

このQ&Aのポイント
  • DOSのバッチファイルでもヒアドキュメントを使用することができます。
  • ヒアドキュメントを使用することで、データファイルを作らずにコマンドに引数を渡すことができます。
  • これにより、ファイル管理が簡単になり、小さなデータセットの場合は特に便利です。
回答を見る
  • ベストアンサー

DOSのバッチファイルでのヒアドキュメント

UNIXのシェルスクリプトでは、コマンドに引数を渡すときに ヒアドキュメントを使って 例えば、 command <<EOF data ・ ・ ・ EOF という風に、commandの次行からEOFという文字が出てくるまでの間の 値を引数として与えられたり出来ますが DOSのバッチファイルでも同じ様なこと(似たようなこと)は出来るのでしょうか 現在とあるコマンドに対し、データセットを渡す際に その都度データファイルを作って、リダイレクトで引数を渡す という方法で、対処しています これが出来ると、小さなデータセットくらいならファイル作らなくて済むので (バッチファイル中にデータセット書き込めるので) ファイル管理とか非常にやりやすくなるんですが・・・ ご存じの方、教えて下さい!! 勿論、代替策でも結構です

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

無理です。 スクリプトとは言わず、バッチファイルというあたりで、想像はつくでしょうが。 どうしても、ということであれば Windows で動くシェル bash や tcsh を 導入するということになりますか。 perl でも良いかも。

i_hakase
質問者

お礼

ご回答ありがとうございました。でも、やはり無理でしたか・・・ とりあえず、バッチファイル中で echo データセット1 > file.tmp echo データセット2 >> file.tmp   ・   ・   ・ として、最後にこのtmpファイルをdelするということしてます (ディスクアクセスの回数は格段に上がってしまいますが) しかしながら、Windowsで動くシェルあるのは初めて知りました 回答いただいてから、tcshを見つけましたので、 それをインストールしてみようかと思います ありがとうございました

関連するQ&A

  • ヒアドキュメントの動作

    Unix系でヒアドキュメントを利用する場合について教えて下さい。 ヒアドキュメント(一般的にはEOFで囲む?)を利用すると、複数行に渡ったデータをコマンドに対して送る事が出来ると思います。しかし、suコマンドにヒアドキュメントを使う事は出来ません。 ヒアドキュメントをコマンドに対して指定した場合、内部的(プロセスの生成、ファイルディスクリプタの生成、ヒアドキュメントデータの受け渡し、解析等)にはどのような動作になりますでしょうか。また、何故suコマンドの場合はヒアドキュメントが有効でないのでしょうか(現在はexpectを利用しています) ヒアドキュメント内の一行一行がどのようなタイミングで解釈され実行されるのか、ご存知かどこかに資料があれば教えていただきたく思います。

  • DOSのバッチファイルについての質問です。

    DOSのバッチファイルについての質問です。 フォルダ内のファイルネームを一括変更したいと考えています。 変更したい文字がたくさんあり、その都度インプットして処理したいと思い 下記のようなバッチを組んだのですが上手く動きません。 何かいい方法があればご教授下さい。よろしくお願いします。 echo off SET /P word= for %%a in (*%word%*) do call :sub "%%a" exit /b :sub set fname=%~1 set fname=%fname:%woad%=ああ% ren %1 "%fname%" goto :EOF

  • バッチファイル

    コマンドプロンプトから実行するコマンド 2つを、100回繰り返したいのですが、 バッチファイルで100回繰り返すにはどうしたらよいでしょうか? 単純にForで出来ると思っていたのですが、 dosのバッチファイルのforはちょっと違うみたいで、ほかの言語のように for(){繰り返したい処理} ということが出来ないみたいで、 しかも変数<100というのも出来ない? ようで(INで0 1 2 3・・・のように指定するのですね・・・?) 戸惑っています。 変数を使ってインデントして100で終了させようと思ったのですが、変数も使えない・・・??のですね。(使えるのでしょうか??) そこでWSHで一セット分のコマンドのバッチファイルを作ってWSHからそれを100回呼ぼうかと思ったのですが、いまいち方法がわかりません。 また、wshの中で直接dosコマンドが使えると最もよいのですが・・・。 詳しい方がいましたら教えていただけると幸いです。

  • dosでPerl実行時にPOSTデータを持たせて実行したい

    DOSでPerlを実行するときに、フォームのデータ(POST)をコマンドプロンプトからCGIに渡したいのですが、どうすればいいでしょうか?UNIX系OSならシェルでセットしますよね?DOSではどうすればいいでしょうか?

  • DOSのバッチファイル作成

    DOSのバッチファイルの以下の記述において%1だと一番目の引数だと思うのですが%1%の記述だとなにを意味するのでしょうか? if not "%1%" == "" goto OK

  • Windows7 DOSバッチファイルに関する質問

    Windows7のコマンドプロンプトの バッチファイルの中から 実行ファイルを実行してその結果をリダイレクトする場合 実行ファイル名 引数 > ファイル名 と記述しますが、 実行ファイルの(省略可能な)引数が複数ある場合、 実行ファイル名 引数 ではOKですが 実行ファイル名 引数 > ファイル名 とするとエラーになります。 このような場合、 実行ファイル名 引数 > ファイル名 の部分をどのように記述すればよいでしょうか。 例えば、 Bn_Cmp_CMD.exe "[Bn_Cmp]" "2.52" "d:\data" "e:\data" ではOKですが、 Bn_Cmp_CMD.exe "[Bn_Cmp]" "2.52" "d:\data" "e:\data" > text.log では ハンドルされていない例外: System.IO.IOException: ハンドルが無効です。 場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 場所 System.Console.set_CursorVisible(Boolean value) 場所 ConsoleApplication1.Program.Main(String[] args) というエラーになります。 Bn_Cmp_CMD.exe "[Bn_Cmp]" "2.52" "d:\data" "e:\data" > text.log の部分をどのように記述すればよいのでしょうか。

  • 連番のファイルをDOSコマンドで

    DOSコマンドを利用し、バッチ処理でタスクスケジューラーにて、定期的に、テキストファイルへリダイレクトするのですが、ファイルネームを連番で生成してくれる、コマンド(構文?)をご教授下さい。 例:ipconfig >***.txt (***の部分を連番)

  • DOS上で、UNIXのShellに代替されるものってありますか?

    あるPCから別のマシンにftpを使ってファイルを転送するのですが、作業者(ファイル転送をする人)がftpコマンドなどが使えないため、 パソコンのDOS画面(コマンド実行)から、キーをひとつたたけば、ファイル転送してくれる仕組みをつくりたいのです。(ファイル名は固定のものが数個。転送するのは1ファイル単位でまとめての転送はしない) UNIX上ならftpコマンドを発行するシェルを作れば済むと思うのですが、DOS上ではどうなのでしょうか? UNIXのシェルのようなものはあるのでしょうか?

  • DOSコマンド(バッチファイル)の記述方法について

    Webサイトで、掲示板のログを定期的にFTPダウンロードして管理する運用を考えています。 DOSのFTPコマンドでダウンロードして、タスクで定時実行する所まで、できたのですが、いつも決まった場所にダウンロードするため、データが毎回上書きされてしまいます。 それで、FTPダウンロードの直前に、DOSコマンド(バッチファイル)で別フォルダを作ってデータを退避させるようにしたいのです。 もしできれば『2006_02_20_16_00』など、バッチファイル実行時の日時(年月日、時刻まで)が分かるようなフォルダ名にしたいです。 そんな事できるのでしょうか? DOSコマンドに詳しくないので、分かる方教えてください。 ダウンロードするフォルダは、『c:\Backup\』だとして、書き方の例を教えてください。 よろしくお願いします。

  • cshスクリプト内での”ヒアドキュメント”とパイプライン

    cshスクリプト内での”ヒアドキュメント”とパイプライン cshスクリプト内で、 1)比較的大量の入力を必要とするコマンドcommand1 2)command1の出力をawkにかけて整形する ことをしたいのです。ここで、条件として、一時ファイルを作らないという制約があります。 ここで、ヒアドキュメントというのでしょうか? command1 <<EOF very very long text very very long text very very long text very very long text EOF を用い、command1の入力とします。 そして、command1の標準出力をawkにかけたいのです。 そこで #!/bin/csh ( command1<<EOF very very long text very very long text very very long text very very long text EOF)| awk '............' とかやってみましたが、うまくいきません。 command1 <<EOF | awk '....' very very long text very very long text very very long text EOF もだめです。 別に、<<EOFにこだわるつもりはないのですが、cshスクリプト内で、かつ一時ファイルの作成をせずに、 このようなことをやる方法はあるでしょうか? 入出ストリームの切り替えとかでできそうな木もするのですが、できればそれはなしでお願いします。 なんでcshわざわざこんなことをやるんだ、一時ファイル作ればいいじゃん、という意見ごもっともですが、cshの理解のため、あえてやってみたいのです。 よろしくお願いいたします。