Memo/Windows/BatchFile

https://dexlab.net:443/pukiwiki/index.php?Memo/Windows/BatchFile
 

バッチファイル


ダブルクオートの除去

test.bat "aaa bbb"
"aaa bbb"
aaa bbb

7zを使ったzipの作成

  1. 7zdir.bat
    • 複数ディレクトリから「ディレクトリ名.zip」を作成する
    • cdしているのはTOPディレクトリ名を含まないzipを作りたいため
      for /D %%A in (*) do (
        cd "%%A"
       "C:\Program Files\7-Zip\7z.exe" a -tzip -r "..\%%A.zip" "." 2>&1 >> ..\7zdir_result.txt
        cd ..
      )
  2. 実行
    7zdir .

日付と時刻の抽出

  • Windows7で確認
    echo %date%
    2014/12/01
    
    echo %time%
    01:02:03.45
    
    echo %date:~-10,4%%date:~-5,2%%date:~-2,2%
    20141201
    
    echo %TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
    010203

UAC対応

  • UAC有効時に「管理者として実行」から実行すると、「%windir%\system32」へと強制移動してしまい、動作しない場合がある対策。以下を先頭に追記
    CD /D "%~dp0"

バッチファイルで文字列の抽出

  • CSVやTSVといったファイルから、特定の値を抽出したい場合
  • windows7で確認
  • a.csv
    a,100
    b,200
  • a.bat
    @echo off
    for /f "tokens=1,2 delims=," %%a in (a.csv) do echo %%a ---- %%b
    rem 結果:a ---- 100
    rem       b ---- 100
    
    for /f "tokens=1,2 delims=," %%a in (a.csv) do if "%%a" == "a" echo %%b
    rem 結果:100

バッチファイルの実行パス取得

  • %~<オプション><変数名>% で取得する
  • ヘルプで確認(windows 7)
    call /?
    ...
           %~1         - すべての引用句 (") を削除して、%1 を展開します。
           %~f1        - %1 を完全修飾パス名に展開します。
           %~d1        - %1 をドライブ文字だけに展開します。
           %~p1        - %1 をパスだけに展開します。
           %~n1        - %1 をファイル名だけに展開します。
           %~x1        - %1 をファイル拡張子だけに展開します。
           %~s1        - 展開されたパスは、短い名前だけを含みます。
           %~a1        - %1 をファイル属性に展開します。
           %~t1        - %1 をファイルの日付/時刻に展開します。
           %~z1        - %1 をファイルのサイズに展開します。
           %~$PATH:1   - PATH 環境変数に指定されているディレクトリを検索し、
                          最初に見つかった完全修飾名に %1 を展開します。
                          環境変数名が定義されていない場合、または
                          検索してもファイルが見つからなかった場合は、
                          この修飾子を指定すると空の文字列に展開されます。
  • 例: d:\tmp\sample.bat, windows7で確認
    echo %0
    sample.bat

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38 (35d)