[ TOP ] > [ cmd ] > [ SYNTAX ] [ 次へ ]
■ SYNTAX

■ 変数(Variable)
  :: 代入
  set VAR=aaa


■ for
SYNTAX FOR %%変数 IN (セット) DO command [param] FOR /L %%変数 IN (開始,ステップ,終了) DO command [param]

    :: RET: 1 2 3 4 5
    FOR /L %%i IN (1,1,5) DO echo %%i

    :: RET: 1 2 3 4 5
    FOR /L %%i IN (5,-1,1) DO echo %%i


SYNTAX FOR /F "eol=; tokens=2,3* delims=, " %%i in (file) do @echo %%i %%j %%k DESC file の各行を delims で区切り, 指定した tokens を変数にバインドして 処理をする

    ; foo.csv
    aaa,bbb,ccc
    111,222,333


    :: RET:
    ::    aaa
    ::    111
    FOR /F "tokens=1 delims=," %%i in (foo.csv) DO echo %%i


    :: 区切り文字  [,] [ ] 
    FOR /F "tokens=1 delims=, " %%i in (foo.csv) DO echo %%i


    :: 2, 3 番目 Token を変数 i, j に Bind
    FOR /F "tokens=2,3 delims=," %%i in (foo.csv) DO echo %%i %%j

    
    :: Comment 文字 [;] より後ろは SKIP
    FOR /F "eol=; tokens=1 delims=," %%i in (foo.csv) DO echo %%i
       
■ if
SYNTAX // {} でなく () IF [NOT] ERRORLEVEL 番号 code IF [NOT] 文字列1==文字列2 code IF [NOT] EXIST ファイル名 code IF defined 変数 ( code ) [else code ] DESC 比較演算子

    :: 文字列の比較 ( if でもいいはず )
    IF var == 7 ( 
      echo "same" 
    ) ELSE (
      echo "different" 
    )


    :: Insentive ( 大文字, 小文字は無視 )
    if /I Test == test (
      echo 同じ
    ) else (
      echo 違う
    )

    :: 文字列が数値のみなら 数値に変換されて大小比較
    if 10 LSS 12 (
      echo 10 は 12 より小さい
    ) else (
      echo false
    )


    :: directory の有無をチェック
    IF exist dir (

    ) ELSE (

    )

    :: file の有無をチェック
    IF exist dir (

    ) ELSE (

    )

    :: 変数が定義されているかどうかチェック
    IF defined v ( echo Def ) ELSE ( echo NotDef )

    :: 環境変数があるかどうか
    IF defined USERNAME ( echo Def %USERNAME% ) ELSE ( echo NotDef )


  WARNING
    :: 以下の記述だめかも
    if aaa == aaa 
    (
       echo "same"
    )
    
    :: 引数が空だと 問題あり ( bash 同様 )

    :: AVOID
    ::    コマンドの構文が間違っています
    if aaa == %5 (
      echo same
    )
    :: GOOD
    if aaa == "%5" (
      echo same
    )



ELSE 節は IF の後のコマンドと同じ行におく

      AVOID
        :: C のようにかけない
        :: "ELSE" を命令として勘違いするらしい
        IF EXIST filename. (
            del filename. 
        ) 
        ELSE (
          echo filename. missing.
        )

      GOOD
        IF EXIST filename. (
            del filename.
        ) ELSE (
            echo filename. missing.
        )

      :: 一行にするのも OK
      IF EXIST filename. (del filename.) ELSE echo filename. missing

■ String
■ 長さ
DESC 関数などで調べる方法はないらしい 部分文字を抽出して調べる
   set x=12345678
   set y=%x:~8%

   if defined y echo 9文字以上


   set x=12345678
   set y=%x:~8%

   if defined y echo 9文字以上
   set z=%x:~7%
   if defined z echo 8文字以上

   if defined z if not defined y echo 8文字
■ 抽出
SYNTAX %var:~OFFSET,LENGTH%

  :: 0 番目 から 2 つ
  :: RET: ai
  set var=aiueo
  echo %var:~0,2%


  :: 後ろから 4 つ目より後
  :: RET: .txt
  set var=foo.txt
  echo %var:~-4%


  :: 後ろから 4 つを消す
  :: RET: foo
  set var=foo.txt
  echo %var:~0,-4%


  :: 2 番目から後ろ
  :: RET: ueo
  set var=aiueo
  echo %var:~2%


  :: Argument の展開は失敗する
  ::    別変数にセットしてからする
  
  :: AVOID
  set pathbody=%1:~0,-4%

  :: GOOD
  tmp=%1
  set ret=%tmp:~0,-4%



  :: 結合は 展開の結果をそのまま使う
 set a=foo
 set b=bar

 echo %a%%b%

■ Math(算術演算)
SYNTAX set /a exp DESC exp を 数式として評価する
  :: 右辺を 数式として評価する

  :: RET: 3
  set /a var=1 + 2
  echo %var%

  :: RET: 1
  set /a var=( 1 + 12 ) % 3

■ Drive.のきりかえ

  :: [:] を忘れずに, 大文字 小文字はどちらでも OK

  :: AVOID 
  d

  :: GOOD
  d:
  :: GOOD
  D:
■ Comment
REM comment rem comment :: comment

[ TOP ] > [ cmd ] > [ SYNTAX ] [ 次へ ]

Subversion入門

メキメキ上達!エクセル関数ワザ100 知識ゼロからできる完ぺき修得本
NINJAIDX 2