タグ

トラブルとDOSに関するiwwのブックマーク (2)

  • バッチファイルでパスに()とか含む時

    以前、「scala の使い方が誤っています。」というエントリを書いた。バッチファイルの中で扱うパスに括弧が含まれていることに起因する問題だった。64ビットWindowsだと、C:Program Files (x86)ってフォルダがあるので。 で、その時は単純にダブルクォートで囲えばいいやと思って set FOO="%PATH_X86%foo" とかやったんだけど、これだとFOOにダブルクォートが含まれてしまう。以下のようにやればOK。結構目から鱗だった。 set "FOO=%PATH_X86%foo" 以下のようなバッチファイルを括弧を含むフォルダの下に置いて、色々変更しながら実行してみると分かりやすい。 if "%OS%"=="Windows_NT" ( SET "FOO=%~dp0..%" SET BAR="%~dp0..%" echo "%FOO%" echo %BAR% ) SET

  • CMD.EXEの遅延環境変数の展開 - KOBUN

    Win32 環境変数の即時展開 バッチファイルを書いていると、変数が思っても見なかった動きをして、困ってしまうことがあります。例えば @echo off setlocal set HOGEHOGE="foobar" if %HOGEHOGE% == "foobar" ( set HOGEHOGE="hogehuga" echo %HOGEHOGE% ) endlocal といった内容のバッチファイルがあったとします。これをぱっと見ると"hogehuga"という出力がされると期待してしまいますが、実際に実行してみると"foobar"という出力結果が得られます。なぜこのような結果になるかといいますと、各コマンドが実行されるときに環境変数が展開されるのではなく、バッチファイルのテキスト行が読み取られるときに展開が行われてしまうからで、上の例は次のように解釈されているために期待した結果が得られな

    iww
    iww 2011/06/13
    変数に代入しなおすとき
  • 1