プロが教えるわが家の防犯対策術!

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

A 回答 (4件)

(-.-;)

    • good
    • 13

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の やり方も全て出てきます。

ヘルプのサンプルで、じっくりと実証してみましょう。
    • good
    • 4

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/se …
    • good
    • 0

とりあえず


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています