[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 06/12 10:35 / Filesize : 199 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【.cmd】 バッチファイルスクリプト %2 【.bat】



1 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 17:44:28 ]
拡張子が .cmd または .bat のバッチファイルのスクリプティング(プログラミング)に関わる
質問,テクニック(JScript,Perl等の埋め込みなど含む),関連情報のためのスレです。

※何でも無理矢理バッチでやろうとせず、WSH等の使用も検討しましょう。

【前スレ】 (関連スレは>>2-5)
【.cmd】 バッチファイルスクリプト %1 【.bat】
pc11.2ch.net/test/read.cgi/tech/1178281991/

642 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 03:40:43 ]
とりあえずヒント

for /f "" %%A in (sample.txt) do (
    set /a count=!count!+1
)

というかforの中にforでやってみたもののうまくいかない・・・orz

for %%F in ("*.csv") do (
    for /f "" %%L in ("%%F") do (
        set /a count=!count!+1
    )
)


643 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 05:47:45 ]
>642
そう書くなら、まず usebackq が必要。
for /f には文字列も渡せるから、単にクォートするだけだと文字列を渡したことになってしまう。

あと、変数 count の初期化が必要。でないと
set /a +1
と変な展開がされてしまい失敗する。

setlocal EnableDelayedExpansion
for %%F in ("*.csv") do (
    set count=0
    for /f "usebackq" %%L in ("%%F") do (
        set /a count=!count!+1
    )
    echo %%F: !count! lines
)

644 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 10:20:54 ]
apache ログ 集計 の検索結果 約 93,500 件中 1 - 100 件目 (0.46 秒)

Apacheのログの集計なら皆がやってることだよね
自分で変なもの作るより普通の方法でやってみたら?
まずはApacheスレで相談するのがいいと思う

645 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 12:16:00 ]
>>643
全部書き込んだわけじゃないから・・・
遅延変数オンにさせてない時点で気づいて・・・

646 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 12:39:43 ]
set /a count = count + 1
set /a count += 1

なら、初期化いらず、遅延いらず。

647 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 13:51:23 ]
>>646
そうなのか!!

648 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 15:06:42 ]
usebackq って use backquote の略でバッククオートを使ってコマンド引数でシングルクオートを
文字列値の区切りとして使うためのもんだからバッククオート使わないのにusebackqって全然意味ない。

>>646
それやっても遅延も初期化もいるだろ。

649 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 18:55:29 ]
>>648
いや、初期化されていない場合0になるよ。

set count=
set /a count = 10 * count + 1
echo count = %count%

set count=
set /a count = 10 * %count% + 1
echo count = %count%


650 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 19:03:25 ]
通常だとダブルクォートは文字列扱い。
usebackqではダブルクォートはファイル名扱い。
変わるのはバッククォートだけでねえべ。



651 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 20:11:07 ]
>>650
そうだけど、そもそもなんでバッククオートを使うかっていうとシングルクオートをコマンドではなく
文字列扱いとするためだろ。
シングルクオートもバッククオートも使わないのにusebackqにする意味がない。

652 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 20:16:08 ]
>>649
最初のループはいいけど、2回目以降加算されてしまうじゃん。

653 名前:デフォルトの名無しさん [2008/05/03(土) 02:00:48 ]
>>649
set /a count=0
set /a count = 10 * count + 1
echo count = %count%

set /a count=0
set /a count = 10 * %count% + 1
echo count = %count%






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<199KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef