バッチのfor周回〜血反吐まみれのデスク〜


【結論から言うと】

for /f "delims=" で
バッチファイルの文法を読み込み
別ファイルへ書き出す。
だいたい for /f "delims=" %%i in ( ファイルA ) do ( ファイルBに1行ずつ解釈してコピー & echo %%i ぱいぷ findstr /b /c:"rem " )って感じにしてあるが

こいつを回すとファイルA中で作成するログファイルが作成される。

やったこととか試したこととか色々書くので
ログファイルがどの程度元気に誕生しているのかも書く予定。

原因は未だ判明していない
この8月からエンジニアになった
バチバチの初学者にはキツい

ナレッジ的なのが既出であれば
教えてくださいお願いします。

とりあえずバッチで乗り越えるのは諦めて
VBSの勉強を始めた。

【この記事は編集中です】

すべての始まり

めでたくお仕事をいただいたジョンソン。
デスクへの道のり。ジョウシは言った。
「バッチやったことある?」
ジョンソンは素直だ。
「全くないです、すみません」
ジョウシはスパルタだった。
「じゃあ、やろうか」

時間ができた

色々な要件に挫折しそうになりながら、最低限の機能を用意して、実機の到着を待った。
来ない。

えてして、先方様は納期をぶっちぎってくる。

ぜんぜん来ないらしいということだったので(ほんとはもっとちゃんとスケジュール感をジョウシに聞いてあるけどたぶんまた遅れる)、ジョンソンは考えた。
「今動かれたら困るところはrem にしてある。コメントはREM で書いてある。置換用に分けたが、ファイルがそもそもいくつかあるのだから一括置換ができればよいのではなかろうか」

「バッチちょろくね」とか思っていたのだ。

「rem をまとめて削除しよう」

とりあえず、この時点でバッチファイルを50くらい試作して消して8つくらいまで厳選を3周くらいしていたジョンソンは、考えた。

なにからやるべきか

それが分からないとなにもできない。

・やりたいことの洗い出し
・「削除くん(仮)」を保存したフォルダ以下に保存してあるバッチファイルのrem を消したい
・でも元ファイルを上書きするのは怖いから、元ファイルは置いたままコピーを取って、コピーの方のrem を消したい
・コピーは実行用としてひとつのフォルダにまとめたい

つくった

ざっくり分けて3つのセクションがある。
ここはあまり大切ではない認識なのでざっくりしか書かない。ご要望があれば追記します。

1)下準備とfor文
せっとろーかる〜〜をしたり
カレントのパスを変数に格納したり(set)
最終的にファイルをまとめるフォルダを作ったり(mkdir)
あと一応移動したりする(pushd %〜dp0)

for文はざっくりいうと
for /f "usebackq" %%a in ( 'dir ぱいぷ findstr ) do ( call :2 %%a )

2)コピーしたり書き出したりする
「削除くんより下のバッチ」を対象にするのでdirには/sがついている。/bよりも/sが強いらしく、併記してもフルパスで出てくるのだ。
1で見つけたファイルのフルパスを、%1として預かってきているので、%〜nx1とかができる。(入れ子読みにくいから嫌いってだけではない)(なんかスマートなやり方があったら教えてください)
とりあえず%〜ナンヤラで欲しい形にしたパスをsetで変数に格納してfor文を回す。

for /f "delims=" %%A in ( 元 ) do ( set line=%%A
echo !line! ぱいぷ findstr >nul
if not !ERRORLEVEL!==1 (
echo !line:〜4! >> 先 )
else ( echo !line! >> 先 )

〜だいたいこんな感じ〜

3)使い終わったやつを消す
これがもう1つトラブルを招いたわけだが今なんとかしようとしてるところなので、なんとかなったか、もしくは戦略的撤退を選べるとこまで詰まったらまた書きます。

がんばった

これを回す。
黒背景の画面に白いのがブワァーー行ってなんかテンションが上がる。しかしジョンソンは気づく。

なんかファイル増えとる

ジョンソンはAtomを使っており、主に「フォルダを開く」の機能を愛しているため分かるのであるが、左側になんか増えたのだ。

増えたファイルは%LOG%%eLOG%

誰も作れ言うてへん
そんなんいらん

ちなみに拡張子もない

つづく

0906_ログが作られないようにはできたけどその辺はちょっとまだ待ってて