Skip to content
Tana edited this page Sep 7, 2019 · 8 revisions

バッチ ファイルが格納されたフォルダーをカレント フォルダーにする

cd /d %~dp0

直前のコマンドでエラーが発生した場合にバッチを中断する

if errorlevel 1 exit /b

errorlevel 11 はエラーかどうかを判断するコマンドの終了コード。
コマンドによっては 1 以上がエラーであるとは限らないので適宜指定する。
(例: robocopy コマンドは終了コードがビット フラグで表現されているので扱いが特殊)

データのバックアップを自動化

robocopy コマンドを活用するとスマートなバックアップタスクを作成する事ができる。

@echo off

:: バッチ名 (ログファイル名に使用)
set BatchName=FullBackup

:: ログフォルダのパス
set LogDir=.\Logs
:: ログファイル名 (日別に作成)
set LogFile=%LogDir%\%BatchName%_%date:~0,4%-%date:~5,2%-%date:~8,2%.log
:: ログファイルを削除する経過日数
set LogDeleteDays=30

:: ========================================
:: 古いログファイルの削除
:: ========================================
echo 古いログファイルを削除します。(%LogDeleteDays% 日前)
echo.

forfiles /P "%LogDir%" /M "*.log" /D -%LogDeleteDays% /C "cmd /c del @path"

:: ========================================
:: バックアップ
:: ========================================
set CopyFrom=C:\timidity
set CopyTo=E:\Backup\Rowlet\C\timidity
set ExcludeDir=""
set ExcludeFile=""
call :MIRROR

set CopyFrom=C:\Users
set CopyTo=E:\Backup\C\Users
set ExcludeDir="Default" "defaultuser0" "*cache*" "Recent" "Temp" "Macromedia" "UnistoreDB" "UPPS" "Packages" "TileDataLayer"
set ExcludeFile="*NTUSER.DAT*" "*UsrClass.dat*" "*cache*" "*.tmp" "parent.lock"
call :MIRROR

set CopyFrom=D:\\
set CopyTo=E:\Backup\D
set ExcludeDir="System Volume Information" "$RECYCLE.BIN"
set ExcludeFile=""
call :MIRROR
:: ドライブ自体がコピー元になると隠し+システム属性が設定されるので解除する
attrib -H -S "%CopyTo%"

exit


:: ========================================
:: robocopyによるミラーリング
:: ========================================
:MIRROR

echo.
echo ミラーリングを行います。
echo [From]"%CopyFrom%"
echo [To  ]"%CopyTo%"

robocopy "%CopyFrom%" "%CopyTo%" /MIR /R:0 /W:0 /LOG+:"%LogFile%" /NP /NDL /XJD /XJF /XD %ExcludeDir% /XF %ExcludeFile%
exit /b

ビルド自動化

.NET Frameworkに付属しているビルドツールでビルドを行う。 Visual Studioの環境が無くてもビルドが可能となる。

@echo off

echo ビルドを開始します。

:: NuGet パッケージを復元するソリューション ファイル
set TargetSolution=XXX.sln
:: ビルドするプロジェクト ファイル
set TargetProject=XXX\XXX.vbproj
:: ビルド生成物の出力先フォルダ (※ %TargetProject% が起点)
set OutputPath=..\bin\XXX

:: NuGet パッケージ復元で使用するクライアント ツール
set NuGet=nuget.exe
:: .NET Framework 4.x のコンパイラ
set Compiler=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

cd /d %~dp0

if not exist "%NuGet%" (
	echo.
	echo NuGet パッケージのクライアント ツールが見つかりません。

	goto BREAK
)

if not exist "%Compiler%" (
	echo.
	echo .NET Framework 4.x のコンパイラが見つかりません。

	goto BREAK
)

echo.
echo NuGet パッケージを復元します。
echo.
"%NuGet%" restore "%TargetSolution%"

echo.
echo プロジェクトをビルドします。
echo.
"%Compiler%" "%TargetProject%" /p:Configuration=Release;OutputPath="%OutputPath%";PostBuildEvent="del /q *.xml"
:: Releaseビルド、出力先指定、ビルド後に.xmlファイルを全て削除している

echo.
pause
goto EOF

:BREAK
echo.
echo ビルドを中断しました。
pause

Clone this wiki locally