REM ▼▲▼▲▼▲▼▲▼▲▼▲▼
REM ▼スクリプトファイル名
REM ▲『WinMerge_Excel.bat』
REM ▲▼▲▼▲▼▲▼▲▼▲▼▲
@echo off
REM **************************
REM # conhost切替
REM **************************
if not "%1"=="am_admin" (
start conhost "%~f0" am_admin & exit /b
)
REM **************************
REM # 画面サイズ設定
REM # カラー設定
REM # 文字コード設定
REM **************************
mode con: cols=120 lines=16
color 0a
chcp 932
timeout 1
REM **************************
REM # PowerShell実行
REM **************************
powershell -ExecutionPolicy RemoteSigned -File "%CD%\WinMerge_Excel.ps1"
timeout 5
REM **************************
REM # バッチ終了処理
REM **************************
color 17
cls
echo .
echo " ================= "
echo " ====== END ====== "
echo " ================= "
echo .
timeout 3
# ▼▲▼▲▼▲▼▲▼▲▼▲▼
# ▼スクリプトファイル名
# ▲『WinMerge_Excel.ps1』
# ▲▼▲▼▲▼▲▼▲▼▲▼▲
#******************************
# ■ .NET クラス読込
#-----------------------------
Add-Type -AssemblyName System.Windows.Forms
#******************************
# ■ 定数設定
#-----------------------------
#【年月日-時分秒】
$DayTime = Get-Date -Format "yyyyMMdd-HHmmss"
#-----------------------------
#【WinMerge格納パス】
# ※ 環境に合わせて以下のパスを設定
$winMerge = "C:\Program Files\WinMerge\WinMergeU.exe"
#-----------------------------
#【ポップアップメッセージ】
$P_MSG_1 = "★★★★★ 【WinMerge】比較元(左側)ファイルを選択 ★★★★★"
$P_MSG_2 = "★★★★★ 【WinMerge】比較先(右側)ファイルを選択 ★★★★★"
$P_MSG_3 = "★★★★★ 【WinMerge】出力先を確認ください ★★★★★"
#-----------------------------
#【出力メッセージ】
$W_MSG_0 = " ================= "
$W_MSG_1 = " ※※※ 【PowerShell実行 ⇒ WinMerge】 ※※※ "
$W_MSG_2 = " ※※※ 比較元と比較先のファイルを確認ください ※※※ "
$W_MSG_3 = " ====== END ====== "
#-----------------------------
#【msgbox オブジェクト生成】
$msgbox = New-Object -ComObject Wscript.Shell
#-----------------------------
#【fileDialog オブジェクト生成】
$FileDialog = New-Object System.Windows.Forms.OpenFileDialog
$fileDialog.Title = "【★★★★★ 対象ファイルを選択してください ★★★★★】"
$FileDialog.Filter = "すべてのファイル (*.*)|*.*"
$fileDialog.ValidateNames = $false
$fileDialog.CheckFileExists = $false
$fileDialog.CheckPathExists = $true
#******************************
# ■ 関数設定
#-----------------------------
#【ダイアログからパス取得】
function Select_File {
if ($FileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
$filePath = $FileDialog.FileName
#-----------------------------
#【アクセスチェック】
if (Test-Path -LiteralPath $filePath) {
return $filePath
} else {
Write-Error "【*** Path ERROR ***】 : $_"
exit
}
} else {
Write-Host "選択無し(キャンセル)" -ForegroundColor Yellow
exit
}
}
#******************************
# ■ 処理開始メッセージ表示
#-----------------------------
Write-Host " "
Write-Host "$W_MSG_1"
Write-Host " "
Start-Sleep 1
#******************************
# ■ 比較元(左側)を選択
#-----------------------------
$msgbox.popup("$P_MSG_1")
$PATH_L = Select_File
Write-Host "【WinMerge】比較元(左側): $PATH_L"
Start-Sleep 1
#******************************
# ■ 比較先(右側)を選択
#******************************
$msgbox.popup("$P_MSG_2")
$PATH_R = Select_File
Write-Host "【WinMerge】比較先(右側): $PATH_R"
#******************************
# ■ 確認メッセージ表示
#-----------------------------
Write-Host " "
Write-Host "$W_MSG_2"
Write-Host " "
pause
#******************************
# ■ 出力先パス設定
#-----------------------------
# ## $OUTPUT_Path = [Environment]::GetFolderPath("Desktop")
# ## $OUTPUT_Path = (Get-Location).Path
$OUTPUT_Path = $PSScriptRoot
#-----------------------------
$msgbox.popup("$P_MSG_3")
Write-Host "**************************************"
Write-Host "【WinMerge】フォルダ名 : $OUTPUT_Path"
#******************************
# ■ HTMLパス取得(生成)
#-----------------------------
$HTML_File = "$OUTPUT_Path\Diff_HTML_$DayTime.html"
Get-ChildItem | Select-Object Name, Length | ConvertTo-Html > $HTML_File
#-----------------------------
Write-Host "【WinMerge】HTML名 : $HTML_File"
#******************************
# ■ WinMerge 比較実行
#-----------------------------
& $winMerge /r /noninteractive /or "$HTML_File" "$PATH_L" "$PATH_R"
#******************************
# ■ WinMerge比較結果を保存する
#-----------------------------
#【EXCELファイル名の設定】
$EXCEL_File = "$OUTPUT_Path\Diff_Excel_$DayTime.xlsx"
Write-Host "【WinMerge】エクセル名 : $EXCEL_File"
Write-Host "**************************************"
Write-Host " "
pause
#-----------------------------
#【EXCEL オブジェクト生成】
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
#-----------------------------
#【EXCEL ファイル保存処理】
try {
$workbook = $excel.Workbooks.Open($HTML_File)
$fileFormat = 51
$workbook.SaveAs($EXCEL_File,$fileFormat)
Write-Host " "
Write-Host "【*** Excel保存完了 ***】 $EXCEL_File" -ForegroundColor Green
Write-Host " "
}
catch {
Write-Host " "
Write-Error "【*** EXCEL ERROR ***】 : $_"
Write-Host " "
}
#******************************
# ■ オブジェクト解放処理
#-----------------------------
finally {
#-----------------------------
#【EXCEL オブジェクト解放】
if ($workbook) {
$workbook.Close($false)
}
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Remove-Variable excel
#-----------------------------
#【fileDialog オブジェクト解放】
$fileDialog.Dispose()
#-----------------------------
#【msgbox オブジェクト解放】
$msgbox = $null
if ($null -ne $msgbox) {
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($msgbox) | Out-Null
#-----------------------------
#【ガベージコレクション強制】
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
}
}
#******************************
# ■ 処理終了メッセージ表示
#-----------------------------
Write-Host " "
Write-Host "$W_MSG_0"
Write-Host "$W_MSG_3"
Write-Host "$W_MSG_0"
Write-Host " "
Start-Sleep 2
PR