starzware

ITスキル

Windowsバッチ

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%