DOSコマンドでの変数のカウントアップ方法

このQ&Aのポイント
  • DOSコマンドのfor文を使用して変数をカウントアップする方法について教えてください。
  • 現在、DOSコマンドのfor文を使用してあるフォルダの全ファイルのパスとサイズをログファイルに書き出し、全ファイルを0バイトにクリアする処理を行っています。しかし、ログファイルにファイルパスとサイズを書き出す際に連番を出力したいです。
  • 試みた方法として、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コマンドの変数に関する理解がいまひとつで、よくわかりません。  ご存知の方がいらっしゃいましたらご教示いただけると幸いです。

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

  • ベストアンサー
  • mogmogtae
  • ベストアンサー率35% (20/56)
回答No.4

(-.-;)

その他の回答 (3)

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.3

set bit=0 for %%i in (\\hoge\hoge\*.*) do ( call :Roop "%%i" "%%~zi"  rem type NUL > %%i ) goto :EOF :Roop echo\ echo Roop 1para=%1 2para=%2 set /a bit=%bit% + 1 echo bit=%bit%  echo %bit%, %~1,%~2バイト >> log.txt goto :EOF でできますね。他にも FOR /L %変数 IN (開始,ステップ,終了) DO コマンド [コマンドパラメータ] を組み合わせた方法とかもありますね。 この種類の質問が出る方は、ヘルプとかリファレンスを全く見ない方ですね。よく読んで理解すれば、ヘルプにヒントが全部記載されています。 オンラインヘルプだけで上記を作成できます。他の方が、setlocalで拡張機能のOn状態で実行を勧めていますが、これもコマンドラインで >setlocal /? でやり方がでます。 cmdでのコマンドの使い方や、文字列の操作は > cmd /? ででます。ここに今回の問題も記載されていて、 goto /? call /? for /? set /? を見れば上記のスクリプトや、No1,2の やり方も全て出てきます。 ヘルプのサンプルで、じっくりと実証してみましょう。

  • shinh
  • ベストアンサー率39% (363/926)
回答No.2

for文の中でカウントアップ後の表示をさせるには Tacosanさんのとおり 遅延環境変数の展開 すれば できます。 バッチに setlocal enabledelayedexpansion を追加 setlocal enabledelayedexpansion set /a n=0 for ・・・ (     set /a n=n+1     echo !n! ) とりあえず ね まあ 一行に 表示させるには また 工夫されてください。 参考に http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/set_path/cat51/

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

とりあえず echo %%n がおかしいことは理解できますね? でも, それは措いても遅延展開しないとダメかもしれない. コマンド拡張を有効にして !n! とか.

関連するQ&A

  • コマンドプロンプトのfor文の処理について

    以下のようなスクリプトを書き,拡張子を除いた文字列を抽出できているようなのですが, for文の中の ”echo”で出力することができません. 具体的には,入力として,「hoge01.txt」 を与え 「hoge01」 を抽出したいです. 出力結果として 「echoはONです」 とでます. for文の後のechoでは,「hoge01」と問題なく出力されます. これは何故なのかご教授していただけませんでしょうか? ------------------------------------------- for %%i in (*.txt) do (set/p c=%%~ni & echo %c%) echo %c% ------------------------------------------- for文の中だと,変数の指定方法等が異なるのでしょうか? 勉強不足で大変恐縮ですが,どうぞよろしくお願いいたします.

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

  • 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 の デリミタにダブルクォーテーションを使うには

    下記のような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 はうまく出来ました。 どなたかご享受願えませんでしょうか。 よろしくお願いします。

  • 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)))です 回答よろしくお願いいたします。

  • 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に値を設定する方法 ・コマンドが長い場合に改行する方法(もしあれば) よろしくお願いします

  • コマンドの実行結果を変数に格納いしたい。

    有るプログラムへ特定ディレクトリのファイル数を渡す必要があり、バッチファイルを書いてますが、うまく行きません。 アドバイスを頂けましたら幸いです。 コマンドの実行欠課を変数に格納する方法を調べており、FOR文を使う事は分かったのですが、パイプを使った処理がうまく行きません。 ◎実行したいコマンド DIR /B | FIND /C /V "log” ◎バッチファイル @ECHO OFF for /f "usebackq tokens=*" %%i in (`DIR /B | FIND /C /V "log"`) do @set RESULT=%%i echo %RESULT% @ECHO ON パイプを使わず、単純なコマンドだと正常に変数に格納されますので、パイプでFINDに渡している事がだめだと思っております。 こういった場合、どう書けばよいかお教えください。

  • DOS コマンド 複数の変数について

    DOS コマンドで複数の変数を使ってデータを取り出したいのですが できないでしょうか。ファイル名をいったん取り出したあとに さらに、ファイル名の後ろから4文字を取り出したいと思っています。 ご教授いただけると非常に助かります。 例文は以下となります。 もう少し複雑なコマンドを作成していますが、 同様の箇所となります。最後のy に7890 がセットされた状態としたいです。 Echo on set x=1234567890 set y=%x:~-4% echo y

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

  • DOSのfor文に関して

    コマンドプロンプトからDOSのバッチを動かしています。 for文を使って、あるフォルダ内の、複数のExcelファイルのファイル名の後ろに、日付を付加しようとしています。 ファイル名の先頭には日付を付ける事は簡単に出来たのですが、ファイル名の後ろに付けるとなると拡張子(xls)が邪魔になってしまいます。 何か良い方法があったら教えてください。 set yy=%date:~0,4% set mm=%date:~5,2% set dd=%date:~8,2% cd パス指定 for %%i in (*.xls) do rename %%i "%yy%%mm%%dd%_%%i" 「"%yy%%mm%%dd%_%%i"」で拡張子(xls)が邪魔になる為、現在はファイル名の前に日付を付けています。