TIPS |
変数 |
rem 設定
SET HOGEHOGE=aaa
rem 取得
ECHO %HOGEHOGE%
|
変数が未定なら処理をする |
IF NOT DEFINED 変数 (
SET 変数=xxxxx
)
|
フォルダがなかったら作る |
IF NOT EXIST フォルダ MKDIR フォルダ
|
引数 |
rem aaa.bat B C
ECHO %1 //B
ECHO %2 //C
|
動的変数 |
%CD% カレントディレクトリ(必ずしもバッチファイルがあるフォルダではない)
%DATE% 現在の日付
%TIME% 現在の時刻
%ERRORLEVEL% 直前の処理結果のERRORLEVEL
|
IF |
IF EXIST xxxx DEL xxxx
IF NOT ERRORLEVEL 0 GOTO ERROR_LABEL
IF NOT %ERRORLEVEL%==0 GOTO ERROR_LABEL
|
ラベル |
:ERROR_LABEL
|
ECHO |
rem "xxxx"を表示
ECHO xxxx
rem 空行を表示
ECHO.
|
EXIT |
rem リターン値0で終了
EXIT 0
rem プロンプトを閉じない
EXIT /B
|
日付(yyyymmdd)を取得 |
rem 日付
SET YMD=%DATE%
SET YYYYMMDD=%YMD:~0,4%%YMD:~5,2%%YMD:~8,2%
SET HMS=%TIME: =0%
SET HMS=%HMS:~0,2%%HMS:~3,2%%HMS:~6,2%
SET YYYYMMDDHHMMSS=%YYYYMMDD%%HMS%
|
バッチファイルの場所(カレントとは違う) |
rem バッチファイルの場所(カレントとは違う)
SET BAT_DIR=%~dp0
REM 終端に¥あり
ECHO %BAT_DIR%
|
入力値を変数に設定する |
rem 入力 変数choiceに入る
SET /P choice="1:xxx, 2:xxx > "
ECHO %choice%
|
ベース |
@ECHO OFF
REM #########################################
REM Windowsバッチ
REM #########################################
REM 引数チェック
IF ""%1""=="""" GOTO NO_PARAM
REM コマンド実行
CD %~dp0
コマンド
REM 実行結果判定
IF ERRORLEVEL 0 EXIT
:ERROR
ECHO エラーが発生しました
PAUSE
EXIT
:NO_PARAM
ECHO 引数が指定されていません
PAUSE
EXIT
|
バッチファイルへのドロップ |
バッチファイルにファイルをドロップすると%1〜に割当される
ただし、ファイルを複数ドロップした場合、選択したファイルの順番は選択した順番にはならない
|
CALL |
rem 他のバッチファイル(aaa.bat)を呼び出す
CALL aaa.bat
|
フォルダごとコピーする |
rem XCOPYを使う
XCOPY /S/Y/E/H folder1 folder2
/E フォルダが空でもコピーする
/S サブフォルダもコピーする
/H 隠しファイルやシステムファイルもコピーする
/Y 受け側の既存ファイルを上書きするメッセージを表示しない
|
テキスト文字列の検索 |
rem FINDを使う
rem 指定文字列を含む文字列を含む行を表示
FIND "検索文字列" < ファイル
rem 指定文字列のある行を除外して表示
FIND /V "除外文字列" < ファイル
rem 連続して除外する
FIND /V "除外1" < ファイル | FIND /V "除外2" | FIND /V "除外3" > output_file
|
相違チェック |
rem FCを使う
FC file1 file2
|
FOR |
FOR /F %%A IN ( FILELIST.txt ) DO コマンド
|
変数の局所化 |
SETLOCAL
SET A=XXX
ENDLOCAL
ECHO %A% '何も表示されない
|
遅延環境変数 |
REM [遅延環境変数の展開]を有効にしないと[!変数!]が使えない
REM SETLOCALで有効にすると!sum!が都度内容が変わる
REM 有効にしないと式読み込み時に変数内容がすべて同じになる
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /l %%n in (1,1,10) do (
SET /a sum=!sum!+%%n
ECHO !sum!
)
ENDLOCAL
|
タイムスタンプ文字列"/"なし |
SET D = %DATE%
SET T = %TIME%
SET TIMESTAMP = %D:~0,4%%D:~5,2%%D:~8,2%_%T:~0,2%%T:~3,2%%T:~6,2%
|
標準出力と標準エラー出力の両方をリダイレクトしてファイルへ出力する |
REM 上書き
ECHO 正常終了 > outputfile 2>&1
REM 追加書き込み
ECHO 正常終了 >> outputfile 2>>&1
|
VBScriptを実行 |
CD %~dp0
SET script=xxxx.vbs
CScript //NoLog %script% %1 %2 %3 %4 %5 %6 %7 %8 %9 > %1_xxxx_log.txt 2>&1
|
PowerShellの実行 |
REM タスクスケジューラからならフルパス
powershell -NoProfile -ExecutionPolicy Bypass [スクリプトファイル(*.ps1)]
|
引数チェック |
IF ""%1""=="""" THEN GOTO NO_PARAM
:NO_PARAM
EXIT
|
touchの代わり |
type nul > ファイル名
|
ログ(標準)を捨てる |
コマンド > nul
|
ネットワークフォルダに接続 |
net use ¥¥network-folder /user:username password
|
PowerShell呼び出し |
REM PowerShell呼び出し(Policy付き)
powershell -ExecutionPolicy RemoteSigned コマンド/スクリプト
|
更新されたファイル(フォルダあり) バックアップ用途とか |
@ECHO OFF
REM #########################################
REM Windowsバッチ - 更新されたファイルをコピーする
REM #########################################
REM タイムスタンプ
SET YMD=%DATE%
SET YYYYMMDD=%YMD:~0,4%%YMD:~5,2%%YMD:~8,2%
SET COPY_FROM=コピー元のフォルダ
SET COPY_TO=コピー先のフォルダ
SET EXCLUDE_FILE=除外ルールを記載したファイルのフルパス %~dp0¥exclude.txt
REM UPD_YMD=%YMD:~5,2%/%YMD:~8,2%/%YMD:~0,4%
XCOPY /D:MM/DD/YYYY /S /I /F /EXCLUDE:%EXCLUDE_FILE% %COPY_FROM% %COPY_TO%
|
ベース2 |
@ECHO OFF
REM #########################################
REM Windowsバッチ
REM #########################################
REM
REM [BASE]
REM ├tools\
REM │ ├node-v16.16.0-win-x64\
REM │ │ (展開したnode.js実行に必要なファイル) node_module用
REM │ |
REM │ ├apache-maven-3.8.6-bin\
REM │ │ (展開したmaven実行に必要なファイル) mavenモジュール用
REM │ |
REM | ├PortableGit\
REM │ | (展開したgit実行に必要なファイル) git用
REM │ |
REM │ └(ビルドに必要なツール)\
REM │
REM ├backup\
REM │ └(タイムスタンプ)\
REM │
REM ├bin\
REM │ └(バッチファイル)
REM │
REM ├conf\
REM │ └(環境依存設定ファイル) 本番用DB設定とか
REM │
REM ├release\
REM │ └(リリースモジュール)
REM │
REM └src\
REM └(プログラムソース)
REM
REM タイムスタンプ
SET YMD=%DATE%
SET YYYYMMDD=%YMD:~0,4%%YMD:~5,2%%YMD:~8,2%
SET HMS=%TIME: =0%
SET HMS=%HMS:~0,2%%HMS:~3,2%%HMS:~6,2%
SET YYYYMMDDHHMMSS=%YYYYMMDD%%HMS%
REM -=-=-=-=-=-=-=-=-=-=
REM 各フォルダ設定(環境依存)
REM -=-=-=-=-=-=-=-=-=-=
SET BASE_DIR=%~dp0..¥
SET TOOL_DIR=%BASE_DIR%tools¥
SET LOG_FILE=%YYYYMMDDHHMMSS%_log.txt
REM ビルドに必要なツールの設定
REM PATH=%PATH%;%TOOL_DIR%¥node-v16.16.0-win-x64¥
REM PATH=%PATH%;%TOOL_DIR%¥apache-maven-3.8.6-bin¥bin¥
REM PATH=%PATH%;%TOOL_DIR%¥PortableGit¥bin¥
REM PATH=%PATH%;C:¥Windows¥Microsoft.NET¥Framework¥v4.0.30319¥
REM -=-=-=-=-=-=-=-=-=-=
REM 個別設定
REM -=-=-=-=-=-=-=-=-=-=
SET APP_NAME=application1
SET TRANS_TYPE=all
SET GIT_CHECKOUT_DIR=%SRC_BASE_DIR%¥
SET GIT_BRANCH=branch_name
SET NPM_PATH=%SRC_BASE_DIR%¥npm_dir¥
SET POM_PATH=%SRC_BASE_DIR%¥pom.xml
SET SLN_FILE=%SRC_BASE_DIR%¥bbbb¥cccc.sln
REM -=-=-=-=-=-=-=-=-=-=
REM 各フォルダ設定(内部用-相対パス)
REM -=-=-=-=-=-=-=-=-=-=
SET PROGRAM_DIR=%BASE_DIR%src¥
SET RELEASE_DIR=%BASE_DIR%release¥
SET CONFIG_DIR=%BASE_DIR%conf¥
SET SRC_BASE_DIR=%BASE_DIR%src¥
SET LOG_DIR=%BASE_DIR%¥
SET BACKUP_BASE_DIR=%BASE_DIR%backup¥%YYYYMMDDHHMMSS%¥
REM ログファイル
IF NOT DEFINED LOG_FILE(
SET LOG_FILE=%BASE_DIR%%APP_NAME%_%TRANS_TYPE%_%YYYYMMDDHHMMSS%.txt
)
REM コマンド実行
REM コマンド >> %LOG_FILE%
REM バックアップ
IF NOT EXIST %BACKUP_BASE_DIR% MKDIR %BACKUP_BASE_DIR%
ECHO XCOPY /S/Q %RELEASE_DIR%* %MOVETO_DIR% >> %LOG_FILE% 2>>&1
XCOPY /S/Q %RELEASE_DIR%* %MOVETO_DIR% >> %LOG_FILE% 2>>&1
REM クリーン
DEL /S/Q %RELEASE_DIR%* >> %LOG_FILE% 2>>&1
REM git
REM [.git/config]
REM git config --local user.name "name"
REM git config --local user.email email
REM pull
REM git -C %GIT_CHECKOUT_DIR% pull origin %GIT_BRANCH%
ECHO -=-=-=-=-=-=-=-=-=-= >> %LOG_FILE% 2>>&1
ECHO GIT >> %LOG_FILE% 2>>&1
ECHO -=-=-=-=-=-=-=-=-=-= >> %LOG_FILE% 2>>&1
IF NOT DEFINED GIT_CHECKOUT_DIR (
ECHO NO PARAM GIT_CHECKOUT_DIR
GOTO ERROR_LABEL
)
REM [checkout]と[pull]は適切に
git -C %GIT_CHECKOUT_DIR% branch >> %LOG_FILE% 2>>&1
git -C %GIT_CHECKOUT_DIR% checkout . >> %LOG_FILE% 2>>&1
git -C %GIT_CHECKOUT_DIR% fetch >> %LOG_FILE% 2>>&1
git -C %GIT_CHECKOUT_DIR% pull >> %LOG_FILE% 2>>&1
REM ビルド(maven) -f でpom.xmlが存在するフォルダを指定
ECHO -=-=-=-=-=-=-=-=-=-= >> %LOG_FILE% 2>>&1
ECHO maven build >> %LOG_FILE% 2>>&1
ECHO -=-=-=-=-=-=-=-=-=-= >> %LOG_FILE% 2>>&1
IF NOT DEFINED POM_PATH (
ECHO NO PARAM POM_PATH
GOTO ERROR_LABEL
)
CALL mvn package -DskipTests=true -f %POM_PATH% >> %LOG_FILE% 2>>&1
REM ビルド(node.js) package.jsonが存在するフォルダを指定
ECHO -=-=-=-=-=-=-=-=-=-= >> %LOG_FILE% 2>>&1
ECHO npm build >> %LOG_FILE% 2>>&1
ECHO -=-=-=-=-=-=-=-=-=-= >> %LOG_FILE% 2>>&1
REM npm install --local
REM npm cache clean --force
IF NOT DEFINED NPM_PATH (
ECHO NO PARAM NPM_PATH
GOTO ERROR_LABEL
)
CALL npm run build --prefix %NPM_PATH >> %LOG_FILE% 2>>&1
REM ビルド(MSBuild[*.sln,vbproj])
ECHO -=-=-=-=-=-=-=-=-=-= >> %LOG_FILE% 2>>&1
ECHO MSBuild >> %LOG_FILE% 2>>&1
ECHO -=-=-=-=-=-=-=-=-=-= >> %LOG_FILE% 2>>&1
IF NOT DEFINED SLN_FILE (
ECHO NO PARAM SLN_FILE
GOTO ERROR_LABEL
)
MSBuild %SLN_FILE% /t:clean;rebuild /p:Configuration=Release;Platform="Any CPU" >> %LOG_FILE% 2>>&1
EXIT /B 0
:ERROR_LABEL
EXIT /B 99
|
PostgreSQLバックアップ(ダンプ) |
REM -=-=-=-=-=-=-=-=-=-=-=-=
REM PostgreSQL ダンプ
REM -=-=-=-=-=-=-=-=-=-=-=-=
SET HOST=localhost
SET DATABASE=postgres
SET USER=postgres
SET YMD=%DATE%
SET YYYYMMDD=%YMD:~0,4%%YMD:~5,2%%YMD:~8,2%
pg_dump -h %HOST% -d %DATABASE% -U %USER% > postgres_dump_%YYYYMMDD%
powershell -ExecutionPolicy RemoteSigned Compress-Archive -Path postgres_dump_%YYYYMMDD% -DestinationPath postgres_dump_%YYYYMMDD%.zip
|
Oraleダンプ(expdp) |
REM -=-=-=-=-=-=-=-=-=-=-=-=
REM Oracle ダンプ
REM -=-=-=-=-=-=-=-=-=-=-=-=
SET PUMP_DIR=DATA_PUMP_DIR
SET SID=oracle_sid
SET SCHEMA=
SET USER=system
SET PASSWORD=xxxxxx
SET YMD=%DATE%
SET YYYYMMDD=%YMD:~0,4%%YMD:~5,2%%YMD:~8,2%
SET DUMP_FILE=%SID%_%YYYYMMDD%
expdp %USER%/%PASSWORD%@%SID% SCHEMAS=%SCHEMA% directory=DATA_PUMP_DIR logfile=%DUMP_FILE%.log dumpfile=%DUMP_FILE%
powershell -ExecutionPolicy RemoteSigned Compress-Archive -Path %DUMP_FILE% -DestinationPath %DUMP_FILE%.zip
|
PostgreSQLバックアップ(dataのみ, INSERT形式) |
REM -=-=-=-=-=-=-=-=-=-=-=-=
REM PostgreSQL ダンプ データのみ INSERT形式
REM -=-=-=-=-=-=-=-=-=-=-=-=
SET HOST=localhost
SET DATABASE=postgres
SET USER=postgres
SET YMD=%DATE%
SET YYYYMMDD=%YMD:~0,4%%YMD:~5,2%%YMD:~8,2%
pg_dump --dataonly --column-inserts -h %HOST% -d %DATABASE% -U %USER% > postgres_dump_data_insert_%YYYYMMDD%
|