実行するだけでaddとcommitまでしてくれます。
バックアップ用途でsvnリポジトリを作ったときに書いたbat(と言いつつ中身はPowerShell)。
似たような要件があった時に使えそうなので残しておくことにしました。
@setlocal enabledelayedexpansion&set a=%*&(if defined a set a=!a:"=\"!&set a=!a:'=''!)&powershell/c $i=$input;iex ('$i^|^&{$PSCommandPath=\"%~f0\";$PSScriptRoot=\"%~dp0";#'+(${%~f0}^|Out-String)+'} '+('!a!'-replace'[$(),;@`{}]','`$0'))&exit/b
$targetFiles = @(svn status)
if ($targetFiles.Length -le 0) {
echo "No files changed."
exit
}
echo "$($targetFiles.Length) files changed."
foreach($file in $targetFiles) {
if ($file.StartsWith("?")) {
svn add $file.Remove(0, 1).Trim()
} elseif ($file.StartsWith("!")) {
svn delete $file.Remove(0, 1).Trim()
} else {
echo $file
}
}
$dateStr = (Get-Date).ToString("yyyyMMdd-HHmmss")
svn commit --message "${dateStr}"
世代管理対象外のファイル(svn statusでファイル名の前に?とつくやつ)が現れたら
問答無用でsvn addするようになっているので、
特定のファイルを除きたい場合はif文の条件をイジる必要があります。
参考
バッチファイルにPowerShellスクリプトを埋め込む 標準入力対応版
PowerShellで戻り値が配列かどうか不定なコマンドレットを必ず配列で処理する方法