- ベストアンサー
DOSコマンドでの変数のカウントアップ方法
- DOSコマンドのfor文を使用して変数をカウントアップする方法について教えてください。
- 現在、DOSコマンドのfor文を使用してあるフォルダの全ファイルのパスとサイズをログファイルに書き出し、全ファイルを0バイトにクリアする処理を行っています。しかし、ログファイルにファイルパスとサイズを書き出す際に連番を出力したいです。
- 試みた方法として、for文の外で変数を定義し、for文の中でその変数をカウントアップさせて表示する方法を試しましたが、うまくいきませんでした。どのようにすれば連番を出力することができるでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
(-.-;)
その他の回答 (3)
- 0909union
- ベストアンサー率39% (325/818)
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)
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)
とりあえず echo %%n がおかしいことは理解できますね? でも, それは措いても遅延展開しないとダメかもしれない. コマンド拡張を有効にして !n! とか.