Upgrade to Pro — share decks privately, control downloads, hide ads and more …

キレない変数の扱い方 /How to handle variables no anger

キレない変数の扱い方 /How to handle variables no anger

Endo_Hizumi

August 23, 2019
Tweet

More Decks by Endo_Hizumi

Other Decks in Technology

Transcript

  1. キレない変数の扱い方
    バッチファイル編

    View full-size slide

  2. どうも、こんばんわ

    View full-size slide

  3. 遠藤ヒズミです

    View full-size slide

  4. 通りすがりのWebエンジニアしてます

    View full-size slide

  5. 個人的に懐かしのネタといえば

    View full-size slide

  6. Windows Meの時に
    ダイアルアップ接続中に
    フリーズさせて親に怒られた思い出が。

    View full-size slide

  7. キレないバッチファイル変数の扱い方

    View full-size slide

  8. 最初に
    バッチファイルを書くくらいなら、PowerShell
    スクリプト書いた方がまだ、人権があると思
    うな僕は!!

    View full-size slide

  9. バッチファイルとは
    ● DOSコマンドを記述したテキストファイル
    ● WindowsやMS-DOS、OS/2で定型的な作業の自動化に使われる
    ● プログラムの起動ファイルとして用いられることもある
    ● IFやFORなどの制御構文があり、やろうと思えばプログラムも作れる
    ● ラベル・call・exit /b で、関数っぽいものを作ることができる(↓)

    View full-size slide

  10. バッチファイルの変数は癖がありすぎる
    ● 四則演算の時は、SETコマンドに/aオプションをつける ← なるほど
    ● 代入のイコール前後は、スペースを入れてはいけない ← なるほど?
    ● FORやIFの制御構文内で使うには、!で囲む必要がある ← は?
    ● FORの一時変数はCMD直とバッチでは書き方が違う←直の時は%は1つ
    ● コマンドの実行結果を変数に入れるには、FOR文を使う ← めんどい
    よく忘れてハマって、壊れてるんじゃないのこれー!?とキレそうになる。

    View full-size slide

  11. バッチファイルの変数は癖がありすぎる
    ● 四則演算の時は、SETコマンドに/aオプションをつける ← なるほど
    ● 代入のイコール前後に、スペースを入れてはいけない ← なるほど?
    ● FORやIFの制御構文内で使うには、!で囲む必要がある ← は?
    ● FORの一時変数はCMD直とバッチでは書き方が違う←直の時は%は1つ
    ● コマンドの実行結果を変数に入れるには、FOR文を使う ← めんどい
    よく忘れてハマって、壊れてるんじゃないのこれー!?とキレそうになる。

    View full-size slide

  12. 代入のイコール前後にスペースを入れてはいけない
    こう書くじゃん?

    View full-size slide

  13. 代入のイコールに、スペースを入れてはいけない
    実行するじゃん?

    View full-size slide

  14. 代入のイコールに、スペースを入れてはいけない
    ダメじゃん?

    View full-size slide

  15. なんでじゃん?(□は、半角スペースです)
    SET□hoge□=□hoge
    半角スペースまでが変数名扱いだから
    ちなみに値も半角スペース入り

    View full-size slide

  16. こうすればいい

    View full-size slide

  17. こうすればいい
    や っ た ぜ 

    View full-size slide

  18. FORやIFの制御構文内で使うには、!で囲む必要がある
    こう書いても

    View full-size slide

  19. FORやIFの制御構文内で使うには、!で囲む必要がある
    広がるのは、
    え い え ん の ゼ ロ 

    View full-size slide

  20. なんでじゃん?(□は、半角スペースです)
    ● FOR文は、実行時に一行になる
    ● 実行前に、変数を展開する

    View full-size slide

  21. つまり?
    ここがこんな風に10回繰り返されているだけ
    ココ

    View full-size slide

  22. どうすれば?
    ”@setlocal enabledelayedexpansion”を、追記して
    %の代わりに!で変数名を囲うと、実行時に変数を展開してくれる

    View full-size slide

  23. こうすればいい
    や っ た ぜ 

    View full-size slide

  24. こうすればいい
    や っ た ぜ 

    View full-size slide

  25. やっぱり、めんどくさいな!

    View full-size slide

  26. まとめ
    ● 変数代入時にスペースは不要
    ● FORの中では変数参照は%の代わりに!で囲む

    View full-size slide

  27. まとめ
    ● 変数代入時にスペースは不要
    ● FORの中では変数参照は%の代わりに!で囲む
    おわり!聴いてくれてありがと!

    View full-size slide