• 締切済み

For文について (DOS起動)

テキストファイルの内容を1行ずつ取り出したいと思い、以下のコマンドを実行しました。  for /f %i in (test.txt) do echo %i このコマンドをWin7及びXPのOS上コマンドプロンプトで実行した場合は問題ありませんが、MS-DOS6.22やWin98、WinMEのDOS起動ディスクなどの場合、Syntax errorとなります。 ※test.txtの内容は、TABやSpaceなし、半角英数字のみの文字列で4行程度保存しています。 この為、DOS起動ディスクでは、For文を使えないのかと思い、以下コマンドを実行した所、正常に動作しました。  for %i in (1 2 3 4) do echo %i この事から、For文にてテキストファイルの読み込みが出来ない状況のようです。 どのようにすれば、テキストファイルを読み込む事が出来ますでしょうか。 宜しくお願い致します。

みんなの回答

  • RURUFOU
  • ベストアンサー率55% (5/9)
回答No.1

test.txt が、こんな内容でC:¥に存在していて --- ここから ---- abcd efgh ijkl mnop --- ここまで ---- for /f %i in (test.txt) do echo %i をWIN7とかXPで実行すると --- ここから ---- C:\>for /f %i in (test.txt) do echo %i C:\>echo abcd abcd C:\>echo efgh efgh C:\>echo ijkl ijkl C:\>echo mnop mnop --- ここまで ---- このような実行結果になりますが DOS起動ディスクでも同じような 結果を得たいという事でよろしいでしょうか? DOSのFor文は、「/f」の機能がサポートされていないので 他のコマンドとフリーソフトを組み合わせて何とかやってみました。 type test.txt | sed -n -e "s/^\(.*\)/echo \1/g" -e "p" | srep /bx を98の起動ディスク&QEMU(エミュレータ)で実行してみました。 --- ここから ---- A:\type test.txt | sed -n -e "s/^\(.*\)/echo \1/g" -e "p" | srep /bx A:\>echo abcd abcd A:\>echo efgh efgh A:\>echo ijkl ijkl A:\>echo mnop mnop A:\> A:\>exit --- ここまで ---- このような実行結果になりました。 最後に exit って表示されますが、そこはかんべんして下さい。 この処理を行うためには SED.EXE SREP.EXE を起動ディスクに入れておく必要が有ります。 後、パイプの機能を使うので、書込可能なドライブ上で実行して下さい。 フロッピィから起動している場合でも、フロッピィが書込禁止だと動きません。 RAMドライブを作成してカレントディレクトリを移動してから実行すればOKです。 ドライブの空き容量も1キロバイト位は欲しいです。 では、ツールの入手方法です。 sed.exe は、ストリームエディタという標準入力を加工するフリーソフトです。 http://www.vector.co.jp/download/file/dos/util/fh008493.html から sedm103.lzh をダウンロードして、 解凍して出てきた sed.exe を起動ディスクに入れて下さい。 srep.exe は、標準入力を元にバッチの実行を行なうフリーソフトです。 http://dmz.xrea.jp/dahlia/soft/index_s.html から srep101.lzh をダウンロードして、 解凍して出てきた srep.exe を起動ディスクに入れて下さい。 起動ディスクに容量の関係で 各ツールが入らない場合は upx を使ってファイルサイズを減らすのも手です。 upx.exe は、拡張子がEXE等の実行ファイルを圧縮するフリーソフトです。 http://upx.sourceforge.net/ から upx308w.zip をダウンロードして、 解凍して出てきた upx.exeを作業用のフォルダに入れて下さい。 圧縮したいファイルを upx.exe が有るフォルダに入れて upx --best --8086 sed.exe upx --best --8086 srep.exe と入力して圧縮後のファイルを起動ディスクに入れて下さい。 それでも足りない場合は upx --best --8086 himem.sys upx --best --8086 jfont.sys upx --best --8086 jdisp.sys で、このあたりファイルを圧縮して容量を稼いで下さい。 それでは最後に 1行づつの表示じゃないですが type test.txt とか more test.txt ※ 要 more.com そして行が多いと表示が止まる じゃダメですか?

関連するQ&A

  • 【DOSコマンド】for の デリミタにダブルクォーテーションを使うには

    下記のような1行だけ書かれたテキストファイルがあり、その中からダブルクォーテーションで囲まれた部分を抜き出そうとしています。 --【abc.txt】----------------------------------------------------------- Command Line: "C:\Program Files\test\test.exe" ---ここまで------------------------------------------------------------- (C:\Program Files\test\test.exe を抜き出したい) DOSコマンドのfor文を使って抜き出そうとしたのですがダブルクォーテーションをどうやってデリミタに指定したらいいのかわかりません。   for /f 'delims=" tokens=2' %i in (test.txt) do @echo %i  とか   for /f "delims="" tokens=2" %i in (test.txt) do @echo %i など いろいろやってみたのですがエラーが出ました。 試しにテキストファイルのダブルクォーテーションを”+”に置き換えて試したところうまく出来たので、デリミタの指定の仕方だけだと思うのですが、どうしてもわかりません。 Command Line: +C:\Program Files\test\test.exe+   に対して for /f "delims=+ tokens=2" %i in (test.txt) do @echo %i はうまく出来ました。 どなたかご享受願えませんでしょうか。 よろしくお願いします。

  • For文のtokensにおけるバッチファイル作成について

    はじめまして。 バッチファイルにて以下のコマンドを作成して 実行したのですがきちんと実行されません。 コマンドプロンプトを起動して1個1個実行するときちんと 実行されます。どういうことなのでしょうか? <バッチファイル> @echo off cd /d デスクトップ for /F "tokens=2" %i in ( file.txt ) do echo %i >> result.txt pause <file.txtの中身> 1<tab>2<tab>3 4<tab>5<tab>6

  • バッチファイルのfor文を使ってファイルサイズをMbyteで表したい。

    バッチファイルのfor文を使ってファイルサイズをMbyteで表したい。(WindowsXP) for文を使って、フォルダー内のファイル名とサイズ一覧を作ろうとしています。 1)for %%i in (c:\test\*.*) do echo %%i %%~zi>> c:\test\testfiles.txt で一応はできたのですが、これではファイルサイズがわかりにくいので、メガバイト単位にしたいのです。(だいたいわかればいいので1024で割るとかはしない) 2)for %%i in (c:\test\*.*) do echo %%i %%~zi/1000000>> c:\test\testfiles.txt 3)for %%i in (c:\test\*.*) do set /a x=%%~zi/1000000 & echo %%i %%x>> c:\test\testfiles.txt としてもうまくいきません。 %%~ziが数値でなく文字列のため、だと思うのですが、3)は%の付け方とかも間違ってそう。 どう書けばメガバイト単位で一覧を出せるでしょうか? あれ? 4)for %%i in (c:\test\* ) do if %%~zi GEQ 1000000 echo %%i>> c:\test\testfiles.txt とすれば1メガ以上のファイル名一覧が出ますね。 ということは%%~ziは数値なのか。  どなたか、どこが間違っているのか教えていただけないでしょうか

  • DOSコマンドのFOR文で空白を含むファイルパスの指定方法

    DOSコマンドのFOR文で空白を含むファイルパスの指定方法 DOSコマンドのFOR文で、FORの繰り返し条件に 空白を含むファイルパスを指定する方法を教えてください。 やりたいことのイメージはこんな感じです。 for /f %%a in (C:\Documents and Settings\user\デスクトップ\list.txt) do ( echo %%a ) バッチファイルとlist.txtを同じディレクトリに配置し、かつ FOR文の前にCDを含めない事を条件にすれば 下記でもうまくいきます。 for /f %%a in (list.txt) do ( echo %%a ) 他のコマンドとの関係からこの前の処理で一度ディレクトリの 変更を行なう処理を含むため、FOR文で指定するファイルは 絶対パス指定をしたいと思っています。 簡単なことのような気もするのですが、 もしかしたら出来ないのかもしれないとも思っています。 FORの繰り返し条件に空白を含むファイルパスを 指定することはできるのでしょうか? 出来るのならばその方法を教えてください。 よろしくお願いします。

  • 【DOSコマンド】for文の中で変数をカウントアップしたい。

    【DOSコマンド】for文の中で変数をカウントアップしたい。 【現在のソース】 for %%i in (\\hoge\hoge\*.*) do (  echo %%i,%%~ziバイト >> log.txt  type nul > %%i ) 【現在の処理内容】 とあるフォルダの中になる全ファイルのパス、サイズをログファイルに書き出し、、 全ファイルを0バイトにクリアする。 【やりたいこと】 ログファイルにファイルパス、サイズを書き出す際に連番を出力したい。 例) 1,\\hoge\hoge\aaa.txt 2,\\hoge\hoge\ddd.txt 3,\\hoge\hoge\123.txt 【現在までに試みた方法】 for文の外で「set n=0」。 for文の中で「set /a n=%n%+1」「echo %%n」 【環境】 XP Pro Version2002 SP2  DOSコマンドの変数に関する理解がいまひとつで、よくわかりません。  ご存知の方がいらっしゃいましたらご教示いただけると幸いです。

  • DOSコマンドバッチのFOR文の記述

    FOR文で以下のように記述しています。 SET FILENAME=aaa.txt FOR /F "tokens=1,2" %%i IN (revs.txt) DO SET FILENAME=%%i-%%j.txt & echo %FILENAME% echoで直前でSETした値を表示したいのですが、どうしても変化しません。(aaa.txtのまま) ※%i,%jには正しく値が設定されています。 以下を教えてください。 ・FILENAMEに値を設定する方法 ・コマンドが長い場合に改行する方法(もしあれば) よろしくお願いします

  • dosのfor構文の意味について

    昨日に異なる階層も含めたファイルの一覧表示のやり方について質問させて頂きました。(http://oshiete1.goo.ne.jp/qa4360685.html) その中で以下のコマンドだと目的の一覧が出力できたのですが、初心者のため構文の意味が分かりませんでした。 c:\>for /r c:\folder1 %i in (*.csv) do @echo %~nxi >> list.txt 質問事項といたしましては大きく2点です。 1.for文の構文である「%変数」の変数とは何なのか http://itpro.nikkeibp.co.jp/article/Windows/20051006/222331/ FOR %変数 IN (ファイル名セット) DO コマンド [コマンドパラメータ] 2.一覧表示に使ったコマンドの意味(具体的にはそれぞれの単語(/r,%i,@echo,%~nxi)))です 回答よろしくお願いいたします。

  • FOR文のログファイル書き出し

    以前こちらで、for文を教えてもらいました。 同じディレクトリにある*.txtファイルの最後の行に、XXXXXを追記するというものです。 FOR %%F IN (*.txt) DO echo XXXXX >> %%F ここで同じディレクトリにある*.txtが、2000ファイル近くあるので、処理がされたかどうかをログファイルとして書き出したいのですが、FOR文を使ったリダイレクション(>>)は、どのようにやるのでしょうか? (当然ながら、FOR %%F IN (*.txt) DO echo XXXXX >> %%F >> log.txt などとしてもダメでした) お手数をおかけします。よろしくお願いいたします。

  • MS-DOS: for文で「01」が「1」になってしまいます

    よろしくお願いします。 Windows 2000 Server についての質問です。 for文を使いバッチを組んでいます。 形式は下記です。 FOR /L %変数 IN (開始,ステップ,終了) DO コマンド [コマンドパラメータ] 1.例えば、次のようにバッチファイル(test.bat)に記述します。  for /L %%F IN (%1,1,%2) DO echo %%F 2.そして、次のようにコマンドプロンプトで実行します。  test.bat 01 06 3.エコーとして返るのは、1,2,3,4,5,6 という1桁の数値であり、   01,02,03,04,05,06 という2桁の数値ではありません。   後者のように2桁で返したいのですが、どのようにすれば良いでしょうか。

  • バッチファイルのfor文の使い方がわかりません。

    バッチ初心者です。 指定したフォルダのテキストファイルを一括置換するバッチファイルを作成したのですが、 for文を使うところでつまづいてしました。 for文のin( )内にディレクトリを入れると失敗してしまいます。 失敗例↓ for %%f in (d:\aaa\*.txt) do ( set fname=%%f set fname=!fname:%1=%2! ren %%f !fname! ) for文を for %%f in (*.txt) にすると成功します。 IN( )内にディレクトリを入れると処理が失敗するのはなぜでしょうか?? helpを読んでもわかりません。 試しにオプション付けて for /r d:\aaa %%f in (*.txt) do echo %%f を実行すると成功するので、 for /r d:\aaa %%f in (*.txt) do ( ・・・・ ) にしてみましたが、成功しません。。。