• ベストアンサー

MSDOSのfor文

DOSコマンドのFOR文で結果を出力させるにはどういう記述をすればよいでしょうか? 実行させたいのは、 for /d %%a in (ファイルパス\*) do del "%%a\*.cab" という内容なのですが、末尾に「>> log.log」だとうまく出力されません。 ""で囲った中にしてみてもやはり同じ状況なのですが、どうにか出力させることはできないでしょうか?

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

  • ベストアンサー
  • heinell
  • ベストアンサー率35% (420/1172)
回答No.2

%%a(ディレクトリ名)をログ出力でしたらechoで明示的に標準出力するのが簡単でしょうね for /d %%a in (ファイルパス\*) do ( echo 対象ディレクトリは%%aです >>log.txt del "%%a\*.cab" ) とか。 (全体のバッチファイルを標準出力でもいけると思いますが試してません) 中のファイル名の出力までしたいなら、for文を入れ子にして、内側のforでファイル名展開させるとか。

pepe3pei
質問者

お礼

heinellさん、たびたびありがとうございます。 とりあえずdirのパイプで対象ファイルがなければそれでいいかなとしました^^; for文の入れ子、検討してみます。 (複雑にするとわからなくなるのでほどほどに)

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.3

標準エラー出力をリダイレクトしたいなら del not_exist 2>> log.txt で出来るよ。

全文を見る
すると、全ての回答が全文表示されます。
  • heinell
  • ベストアンサー率35% (420/1172)
回答No.1

「○○を削除しました」というメッセージを記録しようとしてるのでしょうか? でしたらforの問題じゃなくてDELコマンドの問題です。 バッチファイルを使わずにコマンド単体で試しても0バイトの出力しかないでしょう。 >>でリダイレクトできるのは標準出力。 DELで表示されるメッセージは標準エラー出力 なので>>ではログを残せない訳です。

pepe3pei
質問者

お礼

heinellさん、ありがとうございます。 DELコマンドは削除できた結果は0バイトになるのですね。 確かに、削除できましたというメッセージは表示されませんもんね。 勉強になりました、ありがとうございます。 最後にdirを取得するしかないですかね…。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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コマンドの変数に関する理解がいまひとつで、よくわかりません。  ご存知の方がいらっしゃいましたらご教示いただけると幸いです。

  • 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文について (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文にてテキストファイルの読み込みが出来ない状況のようです。 どのようにすれば、テキストファイルを読み込む事が出来ますでしょうか。 宜しくお願い致します。

  • msdos for文 パスに!がある時の記述の仕方

    C:\test\dataのフォルダに入っているファイルの数と 最も古いファイルのファイル名は リスト1で取得できますが、 パスに!が入っているC:\test\!dataでは、 リスト2のようにしても、for文の所で、 指定されたファイルが見つかりません。 と表示されてしまいます。 パスに!が入っている時は、 どのように記述すればよいのでしょうか。 ---リスト1------------------------------------ @echo off set folder="C:\test\data\" for /F %%a in ('dir %folder% /a:-d ^| find "個のファイル"') do set num=%%a echo ファイルは %num% 個あります。 for /F %%F in ('dir %folder% /b /o:-d') do set filename=%%F echo 一番古いファイルは %filename% です。 ---リスト1の実行結果-------------------------- ファイルは 50 個あります。 一番古いファイルは test100.txt です。 ---------------------------------------------- ---リスト2------------------------------------ @echo off set folder="C:\test\!data\" for /F %%a in ('dir %folder% /a:-d ^| find "個のファイル"') do set num=%%a echo ファイルは %num% 個あります。 for /F %%F in ('dir %folder% /b /o:-d') do set filename=%%F echo 一番古いファイルは %filename% です。 ---リスト2の実行結果-------------------------- 指定されたファイルが見つかりません。 ファイルは 50 個あります。 指定されたファイルが見つかりません。 一番古いファイルは test100.txt です。 ---------------------------------------------- (実行環境 : Windows7のコマンドプロンプト)

  • パイプの後半をfor文にする

    `コマンド` | for $1 in       do        `コマンド`       done としたいのですが、doからdoneの部分がうまくいかず 構文エラーになります。 パイプ以下を、{}でグルーピングしてもうまくいきません。 `コマンド` | { for $1 in       do        `コマンド`       done; } どうしたらうまくいくでしょうか?

  • for文について

    以下のプログラムにおいて, for文の末尾にセミコロンがついているタイプ( for(...); ) のfor文の制御の流れは,セミコロンがついていないタイプ( for(...) ) と何が違うのでしょうか? for文の末尾にセミコロンがないタイプのものしか知らないため, セミコロンがつくことで流れに何が変化するか知りたいです. 御存知の方がいらしたら,教えてください. 【出力結果】 forの末尾にセミコロンがある 2100 forの末尾にセミコロンがない 700 /*+++++++ ソース ++++++++*/ #include <stdio.h> int main() {  int s_tb1[3] = {60,100,150};  int mg_tb[3] = {1,3,4};  int i,size=80,base=600,mode=1,ext=100;  for(i=0; size>s_tb1[i]; i++);   printf("%d\n", (base+mode*ext)*mg_tb[i] );  return(0); }

  • コマンドプロンプトのfor文での連続コマンドについて

    コマンドプロンプトのfor文での連続コマンドについて winXPを使っています。 コマンドプロンプトでバッチファイルを作り、フォルダーの中にあるPDFファイルをアドビリーダーで印刷して削除したいのですが、アドビリーダーを手動で終了させないとファイルの削除ができません。どうすればいいでしょうか。 *****printpdf.batの内容**************** for %%A in (E:\pdf\*.*) do ( "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" /t %%A taskkill /F /IM AcroRd32.exe Del %%A ) *************************************** 3行目のtaskkillが問題らしいのですが。。。 また、本当はコマンドを&&でつなげたいのですが、 ( )でくくらないとDELされません。 &&でつなげるにはどうしたらいいか、 その点もおわかりでしたらご教授ください。 よろしくお願いします。

  • 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 などとしてもダメでした) お手数をおかけします。よろしくお願いいたします。

  • バッチファイル(for文)がうまく動かない

    以下のようなバッチファイルをWin2008上で実行しようとしています ------------------------------ @echo on set LOGFILE=C:\a.log set CONF=C:\a.txt FOR /F "tokens=1-3 delims=," %%i in (%CONF%) do ( echo %%i %%j %%k > %LOGFILE% 2>&1 ) ------------------------------ C:\a.txtの中身はこのようになっています ------------------------------ a,b,c e,f,g ------------------------------ 期待する結果は「1.」なのですが.batを実行しても「2.」の結果がログに表示されます どのように修正すれば期待の結果が得られますでしょうか ※ちなみに.batの実行ではなくコマンドプロンプトで[%%]を[%]に変更すれば正常に実行できました 1. ------------------------------ a b c e f g ------------------------------ 2. ------------------------------ e f g ------------------------------