実は参照渡しでした(汗)

最近になって、よくバッチをくるようになった自分にとって、中途半場に知識を持っているせいか、先入観から穴を見つけられない事とかがあって、
あとあと、自分の視野の狭さが狭くてガッカリしちゃう。。
今回も分かってみるとなーんだだったんですけどね(汗)


というのも、バッチからバッチを呼ぶときって、
callか、startを使うみたいで、これを使わないで子バッチを呼ぶと、親バッチの後続には処理が進んでくれません。
そして、親バッチから子バッチに変数を引数として渡す場合、
さらに、その変数名が親でも子でも同じ変数名ならもっと注意が必要!


親から渡した変数を子で処理して、書き換えると、親側の変数も変わっちゃうからです。。


最初はなんで動かないだろと悩みました。2時間ぐらい。。
というのも、親バッチ、コピー用の子バッチ1、削除用の子バッチ2の構成で、
1.親バッチでパスを設定。
2.子バッチ1でパスを受け取り、コピー
3.子バッチ2でパスのファイルを削除
の構成だったんだけど、なぜか、子バッチ2で「そんなパスありません」と出てエラーになってた*1
pause入れたり、echo onしたり、実はWindowsXPで動作確認したけど、Windows2008だと権限周りでダメとか、リモートジョブソフトから動かしてるけど、そいつが使うユーザだと実は動かせないとか、バッチをバラバラにして動かしたりして調べていたが、


子バッチで、コピーした後、一時ファイルとして、別フォルダにおいて、そこでZIP圧縮する処理をするときに、その一時ファイルのパスを子バッチの変数に上書きしてたんだけど、
どうもそのパスが親にも影響していた。
えー。マジっすか。でもcall /?を見ると確かに書いてあった。

...
2 回目に、バッチ スクリプトが終了します。バッチ スクリプトから "戻る"
ための GOTO :EOF 拡張機能の説明については、GOTO /? と入力してください。

また、バッチ スクリプトの引数参照 (%0、%1 など) の展開は、次のように
変更されました:


%* バッチ スクリプト内では、すべての引数 (%1、%2、%3、%4、
%5 など) を参照します。

バッチ パラメータ (%n) の置換は拡張されました。次のオプション構文
...


引数参照ってかいてあるー!orz

*1:朝バッチだったけど、エラーとか出さなくて良かった。。