トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
CommandPrompt
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ 制御構文




___

■ for_each_file

パターンにマッチするファイルを処理する
  for  %%f in (*.*) do echo %%f

  for  %%f in (*.txt) do echo %%f
再帰的にするには /R をつける
  for  /R  %%f in (*.txt)  do  echo %%f
___

■ forfiles

Windows VISTA 以降から利用できる。
    forfiles   /c   "cmd /c  echo @file"
    forfiles   /c   "cmd /c  echo @path"
再帰的に検索する。
    forfiles /s  /c   "cmd /c  echo @path"
パターンを指定する
    forfiles /m *.txt  /c   "cmd /c  echo @path"
日付を指定する。
    //  2015/3/1 以降に編集したファイル
    forfiles  /d  +2015/3/1  /c   "cmd /c  echo @path"

    // 30 日前に編集した
    forfiles  /d -30    /c  "cmd /c  echo @path"
___

■ for

SYNTAX FOR %%変数 IN (セット) DO command [param] FOR /L %%変数 IN (開始,ステップ,終了) DO command [param] DESC (Set) 内のトークンを変数にセットしてひとつずつコマンドで処理する WARNING %変数 ではなく %%変数 でないとだめ

    :: 連番 Directory をつくる
    for %%i in (1 2 3) do mkdir test_%%i

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

    :: 5 4 3 2 1
    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


    ::    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
       
/F ["< options>"] [Windows NT系] [拡張構文] < pattern> のデータを1行ずつ読み取って解析し、それらに対して < command-line> を実行します。%variableには解析した文字列が入ります。解析方法は「"< options>"」で指定します(解説参照)。 < pattern> にはファイル名(スペースやセミコロンで区切ることで複数指定可能です)、文字列(" "で囲みます)、コマンドライン(コマンドラインを' 'で囲みます)が指定可能で、それぞれファイルの中身、文字列そのもの、コマンドライン実行時の(標準出力への)出力結果を入力データとします。ただし、< options> に「usebackq」を含む場合は、文字列は「' '」で、コマンドラインは「` `」で囲む形式に変わります(これによりファイル名に「" "」を使用することができます)。 ※ < pattern> にコマンドラインを指定する場合で、パイプやリダイレクションを使用する場合は それらの文字の直前に「^」を用いることで使用可能ですが、複数のコマンドを「( )」を用いて記述(ネスト)すると正しく解釈されない場合がありますので、使用する際はご注意ください。 delims=delimiters delims="" /F のオプション値として指定する
    /F  "delims="
___

■ if

SYNTAX // {} でないよ ! () だよ ! IF [NOT] ERRORLEVEL 番号 code IF [NOT] 文字列1==文字列2 code IF [NOT] EXIST ファイル名 code IF defined 変数 ( code ) [else code ]

    :: 文字列の比較
    IF var == 7 ( 
      echo same 
    ) ELSE (
      echo diff
    )


    :: Insentive指定( 大文字, 小文字の違いは無視する )
    if /I Test == test (
      echo same
    ) else (
      echo diff
    )

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


    EQU - 等しい
    NEQ - 等しくない
    LSS - より小さい
    LEQ - 以下
    GTR - より大きい
    GEQ - 以上

ERRORLEVEL で処理をわける
    if %ERRORLEVEL% == 0 (

    )

    :: 否定は not を使う。 != はできない。
    if not %ERRORLEVEL% == 0 (
      goto ERROR
    )

  WARNING 
    :: 次の表記もできるが、誤解しやすいので推奨しない

    :: 0 以上ならば
    if %ERRORLEVEL% 0 (

    )

    :: 1 以上ならば
    if %ERRORLEVEL% 1 (

    )

    :: 3 未満ならば
    if not %ERRORLEVEL% 3 (

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

    ) ELSE (

    )

    :: file の有無をチェック
    IF exist test.txt (

    ) ELSE (

    )

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

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


  WARNING
    :: 以下の記述はエラーになる。
    if aaa == aaa 
    (
       echo "same"
    )
    
引数が空だと問題がある 理由は %1 が変数展開されると次のようになる。
    :: BAD
    ::    コマンドの構文が間違っています
    if aaa == %1 (
      echo same
    )

    :: %1 の展開後の結果
    if aaa == (

    ) 

    :: そこで "" 囲む。
    :: OK
    if "aaa" == "%1" (
      echo same
    )
ELSE 節は IF の後のコマンドと同じ行におく

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

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


      :: 一行にしても良い。
      IF EXIST filename. (del filename.) ELSE echo filename. missing



NINJAIDX 0