這是一個備份LINE電腦版對話紀錄的批次檔腳本,使用的前提是先安裝開源、免費的7-Zip壓縮軟體 [1] 💾 Linux上則可以考慮從我以前的文章,然後透過AI進行重構 👉👉👉 粉好用ㄟ自動備份資料庫、網站到信箱、FTP的腳本 [2]
列印本文 [9]
👨👩👧👦 0 次瀏覽 # 📜 腳本功能:
- 自動關閉LINE電腦版,進行備份對話紀錄到我的文件
- 智能檔案壓縮:使用7-Zip進行高效壓縮
- 日期歸檔:使用 Powershell 計算西曆日期,在民國曆電腦上也能用
- 自動清理:保留最近7天的備份,自動刪除舊檔案
- 管理員權限檢測:自動提升為管理員權限執行
- 彩色輸出:支援Windows 10/8.1的ANSI顏色顯示
- 完成音效:執行完成後播放小星星旋律
# 🔗相容性:
- Windows 10+: ✅ 完整功能支援
- Windows 8:大部分相容,需禁用 ANSI 顏色
- Windows 7:部分相容,需禁用 ANSI 顏色、檢查 PowerShell 版本
內容目錄
# 備份LINE電腦版對話紀錄 – 新版本
新版本移除 VBScript 了,改採 Powershell 計算西曆日期,因為微軟已經正式宣布要淘汰 VBScript 了。這項計畫預計在 2027 年之後,VBScript 就會完全從 Windows 系統中移除。
㊙️ 批次檔案下載 [6]
@echo off
REM Refactored by AI (VBScript removed, TaiwanCalendar immune, Pure ASCII version)
setlocal EnableDelayedExpansion
REM ==================================================
REM Configure Variables
REM ==================================================
set "BACKUP_DIR=%USERPROFILE%\Documents"
set "COMPRESSION_LEVEL=-mx9"
set "SOFTWARE_NAME=LINE"
set "SRC_FOLDER1=%USERPROFILE%\AppData\Local\LINE"
REM ==================================================
REM Check 7-Zip Path (32-bit or 64-bit system)
REM ==================================================
if "%ProgramFiles(x86)%"=="" (
set "SEVEN_ZIP_PATH=%ProgramFiles%\7-Zip\7z.exe"
) else (
if exist "%ProgramFiles%\7-Zip\7z.exe" (
set "SEVEN_ZIP_PATH=%ProgramFiles%\7-Zip\7z.exe"
) else (
set "SEVEN_ZIP_PATH=%ProgramFiles(x86)%\7-Zip\7z.exe"
)
)
REM ==================================================
REM Get Gregorian Date via PowerShell (Culture Safe)
REM ==================================================
set "PS_DATE_FILE=%TEMP%\get_date_%RANDOM%.ps1"
> "%PS_DATE_FILE%" echo $now = [datetime]::Now
>>"%PS_DATE_FILE%" echo $cal = [System.Globalization.GregorianCalendar]::new()
>>"%PS_DATE_FILE%" echo $y = $cal.GetYear($now)
>>"%PS_DATE_FILE%" echo if ($y -lt 1912) { $y += 1911 } elseif ($y -gt 2200) { $y -= 1911 }
>>"%PS_DATE_FILE%" echo $dt = [datetime]::new($y, $cal.GetMonth($now), $cal.GetDayOfMonth($now), $cal.GetHour($now), $cal.GetMinute($now), $cal.GetSecond($now), $cal)
>>"%PS_DATE_FILE%" echo Write-Output $dt.ToString('yyyyMMdd_HHmmss', [System.Globalization.CultureInfo]::InvariantCulture)
for /F "usebackq" %%d in (`powershell -NoProfile -ExecutionPolicy Bypass -File "%PS_DATE_FILE%"`) do set "DATETIME=%%d"
if exist "%PS_DATE_FILE%" del "%PS_DATE_FILE%" 2>nul
if "%DATETIME%"=="" (
echo [ERROR] Failed to get date from PowerShell.
if not defined SCHTASKS pause
exit /b 1
)
REM ==================================================
REM Create Exclude File for 7-Zip
REM ==================================================
set "EXCLUDE_FILE=%TEMP%\7Z_EXCLUDE_%DATETIME%.txt"
(
echo *.bak
echo *.old
echo *.temp
echo *.tmp
echo *desktop.ini*
echo *Cache*
echo *DS_Store*
echo *Start Menu*
echo *thumbcache_*.db*
echo *Thumbs.db*
) > "%EXCLUDE_FILE%"
if not exist "%EXCLUDE_FILE%" (
echo [ERROR] Failed to create exclude file!
if not defined SCHTASKS pause
exit /b 1
)
REM ==================================================
REM ANSI Colors Setup
REM ==================================================
for /F "delims=" %%A in ('echo prompt $E^| cmd') do set "ESC=%%A"
set "COLOR_ERROR=%ESC%[40;31m"
set "COLOR_SUCCESS=%ESC%[40;32m"
set "COLOR_WARN=%ESC%[40;33m"
set "COLOR_INFO=%ESC%[40;36m"
set "COLOR_RESET=%ESC%[40;37m"
REM ==================================================
REM Request Admin Privileges
REM ==================================================
net session >nul 2>&1
if %errorlevel% neq 0 (
powershell -noprofile -nologo -Command "Start-Process -FilePath '%~f0' -Verb RunAs" 2>nul
if !errorlevel! neq 0 (
echo %COLOR_ERROR%[WARN] Failed to elevate. Running as standard user.%COLOR_RESET%
timeout /t 2 >nul 2>&1 || ping -n 3 127.0.0.1 >nul
) else (
exit /b
)
)
REM ==================================================
REM Stage 1: Setup Backup Directory
REM ==================================================
echo ==================================================
echo [Stage 1] Checking backup directory...
if not exist "%BACKUP_DIR%" (
mkdir "%BACKUP_DIR%"
if !errorlevel! equ 0 (
echo %COLOR_SUCCESS%[SUCCESS] Backup directory created.%COLOR_RESET%
timeout /t 1 >nul
) else (
echo %COLOR_ERROR%[ERROR] Failed to create backup directory.%COLOR_RESET%
timeout /t 1 >nul
if not defined SCHTASKS pause
exit /b 1
)
) else (
echo %COLOR_INFO%[INFO] Backup directory exists.%COLOR_RESET%
timeout /t 1 >nul
)
REM ==================================================
REM Script Info & Tech Note
REM ==================================================
echo.
echo =============== %SOFTWARE_NAME% Backup Tool ===============
echo.
echo %COLOR_INFO%[INFO] Online backup will be performed.%COLOR_RESET%
echo %COLOR_WARN%Core Tech Note:%COLOR_RESET%
echo 7-Zip -ssw parameter is used. It acts like a forced shutter,
echo bypassing file locks. No need to close the application.
echo.
echo Target directory:
echo "%BACKUP_DIR%"
echo File format:
echo %SOFTWARE_NAME%_Backup_[%DATETIME%].7z
echo.
echo --------------- Starting ---------------
echo.
timeout /t 5 >nul
REM ==================================================
REM Stage 2: Execute Backup
REM ==================================================
echo ==================================================
echo [Stage 2] Executing backup...
set "BACKUP_FILE=%BACKUP_DIR%\%SOFTWARE_NAME%_Backup_[%DATETIME%].7z"
if exist "%BACKUP_FILE%" (
del "%BACKUP_FILE%"
if !errorlevel! neq 0 (
echo %COLOR_ERROR%[ERROR] Failed to delete old backup file.%COLOR_RESET%
timeout /t 1 >nul
if not defined SCHTASKS pause
exit /b 1
)
)
echo %COLOR_INFO%[INFO] Backing up to: %BACKUP_FILE%%COLOR_RESET%
echo ==================================================
echo %COLOR_WARN% Running 7-Zip... Do not interrupt.%COLOR_RESET%
echo ==================================================
REM ==================================================
REM Run 7-Zip (-ssw is enabled)
REM ==================================================
"%SEVEN_ZIP_PATH%" a -t7z -aoa -ssw -y "%BACKUP_FILE%" "%SRC_FOLDER1%" %COMPRESSION_LEVEL% -xr@"%EXCLUDE_FILE%"
if %errorlevel% equ 0 (
echo ==================================================
echo %COLOR_SUCCESS%[SUCCESS] Backup completed.%COLOR_RESET%
echo ==================================================
timeout /t 1 >nul
) else (
echo ==================================================
echo %COLOR_ERROR%[ERROR] Backup failed. Check 7-Zip installation.%COLOR_RESET%
echo ==================================================
timeout /t 1 >nul
if not defined SCHTASKS pause
exit /b 1
)
REM ==================================================
REM Clean up
REM ==================================================
if exist "%EXCLUDE_FILE%" del "%EXCLUDE_FILE%" >nul 2>&1
REM ==================================================
REM End of script
REM ==================================================
echo.
echo________________
echo^|_ \/ __ \^| \ ^| ^|____^|
echo^| ^| ^| ^|^| ^|^| ^| ^|\^| ^| ^| ^|__
echo^| ^| ^| ^|^| ^|^| ^| ^| . ` ^| ^|__^|
echo^| ^|/ / ^| ^|__^| ^| ^| ^|^\^| ^| ^|____
echo^|___/\____/^|_^| \_^| ^|______^|
echo.
echo ==================================================
echo %COLOR_SUCCESS% [DONE] Press any key to exit.%COLOR_RESET%
echo Backup saved to: "%BACKUP_DIR%"
echo ==================================================
echo.
REM ==================================================
REM Melody
REM ==================================================
set "psfile=%TEMP%\twinkle_%RANDOM%.ps1"
if exist "%psfile%" del /f /q "%psfile%"
> "%psfile%" echo $notes = @{
>>"%psfile%" echo"C" = 523
>>"%psfile%" echo"D" = 587
>>"%psfile%" echo"E" = 659
>>"%psfile%" echo"F" = 698
>>"%psfile%" echo"G" = 784
>>"%psfile%" echo"A" = 880
>>"%psfile%" echo }
>>"%psfile%" echo $melody1 = @^("C","C","G","G","A","A","G"^)
>>"%psfile%" echo $melody2 = @^("F","F","E","E","D","D","C"^)
>>"%psfile%" echo $duration = 110
>>"%psfile%" echo $pauseDuration = 110
>>"%psfile%" echo foreach^( $n in $melody1 ^) { [console]::Beep^($notes[$n], $duration^); Start-Sleep -Milliseconds $pauseDuration }
>>"%psfile%" echo Start-Sleep -Milliseconds $pauseDuration
>>"%psfile%" echo foreach^( $n in $melody2 ^) { [console]::Beep^($notes[$n], $duration^); Start-Sleep -Milliseconds $pauseDuration }
powershell -NoProfile -ExecutionPolicy Bypass -File "%psfile%"
del /f /q "%psfile%" 2>nul
endlocal
if not defined SCHTASKS pause
exit /b 0
# 備份LINE電腦版對話紀錄 – 舊版本
@echo off
REM 【設置基本環境與參數】
setlocal EnableDelayedExpansion
REM --------------------------------------------------
REM 【設置所有變數】,其他7-Zip指令可以到下方SEVEN_ZIP_PATH處修改
REM 目前使用的參數是【a -t7z -aoa -ssw -y】
REM -t7z // 指定壓縮格式為 .7z(比 .zip 更高效的壓縮格式)。
REM -aoa // 如果目標檔案已存在,則強制覆蓋(避免提示視窗)。
REM -ssw // 即使檔案正在被其他程式使用,仍嘗試壓縮。
REM -y //自動確認所有詢問,避免用戶手動輸入 Y/N。
REM --------------------------------------------------
set "BACKUP_DIR=%USERPROFILE%\Documents"
set "COMPRESSION_LEVEL=-mx9"
set "EXE_NAME=LINE.exe LineMediaPlayer.exe"
set "SEVEN_ZIP_PATH=%ProgramFiles%\7-Zip\7z.exe"
set "SOFTWARE_NAME=LINE"
set "SRC_FOLDER1=%USERPROFILE%\AppData\Local\LINE"
REM --------------------------------------------------
REM 設定7-Zip路徑 檢查32位或64位系統
REM --------------------------------------------------
if "%ProgramFiles(x86)%"=="" (
set "SEVEN_ZIP_PATH=%ProgramFiles%\7-Zip\7z.exe"
) else (
REM 64位系統,優先檢查Program Files路徑
if exist "%ProgramFiles%\7-Zip\7z.exe" (
set "SEVEN_ZIP_PATH=%ProgramFiles%\7-Zip\7z.exe"
) else (
set "SEVEN_ZIP_PATH=%ProgramFiles(x86)%\7-Zip\7z.exe"
)
)
REM --------------------------------------------------
REM 【生成7-Zip使用的臨時排除規則檔案】
REM --------------------------------------------------
set "VBS_FILE=%TEMP%\get_date.vbs"
set "TIMESTAMP=%DATE:/=-%_%TIME::=-%"
set "TIMESTAMP=%TIMESTAMP: =0%"
set "EXCLUDE_FILE=%TEMP%\7Z_EXCLUDE_%TIMESTAMP%.txt"
REM --------------------------------------------------
REM 7-Zip排除指令【-xr!】透過讀取檔案來達成設定
REM 寫入下列排除規則到臨時檔案
REM --------------------------------------------------
(
echo *.bak
echo *.old
echo *.temp
echo *.tmp
echo *desktop.ini*
echo *Cache*
echo *DS_Store*
echo *Start Menu*
echo *thumbcache_*.db*
echo *Thumbs.db*
) > "%EXCLUDE_FILE%"
REM 檢查是否成功生成規則檔案
if not exist "%EXCLUDE_FILE%" (
echo 錯誤:無法建立排除規則檔案!
if not defined SCHTASKS pause
exit /b 1
)
REM --------------------------------------------------
REM 使用 ANSI Escape Code 來實現輸出文字的高亮顯示
REM --------------------------------------------------
for /F "delims=" %%A in ('echo prompt $E^| cmd') do set "ESC=%%A"
set "COLOR_ERROR=%ESC%[40;31m"
set "COLOR_SUCCESS=%ESC%[40;32m"
set "COLOR_WARN=%ESC%[40;33m"
set "COLOR_INFO=%ESC%[40;36m"
set "COLOR_RESET=%ESC%[40;37m"
REM --------------------------------------------------
REM 【自動提升管理員權限】
REM --------------------------------------------------
net session >nul 2>&1
if %errorlevel% neq 0 (
powershell -noprofile -nologo -Command "Start-Process -FilePath '%~f0' -Verb RunAs" 2>nul
if !errorlevel! neq 0 (
echo( %COLOR_ERROR%[錯誤] 無法提升管理員權限,將以一般使用者權限執行%COLOR_RESET%
timeout /t 2 >nul 2>&1 || ping -n 3 127.0.0.1 >nul
) else (
exit /b
)
)
REM --------------------------------------------------
REM 關閉相關程式
REM --------------------------------------------------
echo( ==================================================
echo( %COLOR_INFO%[提示] 正在關閉相關程式...%COLOR_RESET%
for %%A in (%EXE_NAME%) do (
taskkill /F /IM %%A > nul 2>&1
)
echo( %COLOR_SUCCESS%[成功] 已關閉相關程式%COLOR_RESET%
timeout /t 1 >nul
REM --------------------------------------------------
REM 【階段1】檢查並設置備份目錄
REM --------------------------------------------------
echo( ==================================================
echo( [階段1] 正在檢查並設置備份目錄...
if not exist "%BACKUP_DIR%" (
mkdir "%BACKUP_DIR%"
if !errorlevel! equ 0 (
echo( %COLOR_SUCCESS%[成功] 備份目錄已建立%COLOR_RESET%
timeout /t 1 >nul
) else (
echo( %COLOR_ERROR%[錯誤] 無法建立備份目錄%COLOR_RESET%
timeout /t 1 >nul
if not defined SCHTASKS pause
exit /b 1
)
) else (
echo( %COLOR_INFO%[提示] 備份目錄已存在,開始執行備份%COLOR_RESET%
timeout /t 1 >nul
)
REM --------------------------------------------------
REM 【階段2】獲取西曆日期時間
REM --------------------------------------------------
echo( ==================================================
echo( [階段2] 正在獲取目前的西曆日期時間...
echo WScript.Echo Year(Now) ^& Right("0" ^& Month(Now),2) ^& Right("0" ^& Day(Now),2) ^& "_" ^& Right("0" ^& Hour(Now),2) ^& Right("0" ^& Minute(Now),2) ^& Right("0" ^& Second(Now),2) > "%VBS_FILE%"
for /F "usebackq" %%d in (`cscript //nologo "%VBS_FILE%"`) do set "DATETIME=%%d"
if exist "%VBS_FILE%" (
del "%VBS_FILE%"
if !errorlevel! equ 0 (
echo( %COLOR_SUCCESS%[成功] 西曆日期時間獲取完成:%DATETIME%%COLOR_RESET%
timeout /t 1 >nul
) else (
echo( %COLOR_ERROR%[錯誤] 無法清理臨時檔案%COLOR_RESET%
timeout /t 1 >nul
if not defined SCHTASKS pause
exit /b 1
)
) else (
echo( %COLOR_ERROR%[錯誤] 西曆日期時間獲取失敗%COLOR_RESET%
timeout /t 1 >nul
if not defined SCHTASKS pause
exit /b 1
)
REM --------------------------------------------------
REM 【顯示腳本功能提示】
REM --------------------------------------------------
echo(
echo =============== 備份 %SOFTWARE_NAME% 設定資料夾工具 ===============
echo(
echo( %COLOR_INFO%[提示] 本工具將備份 %SOFTWARE_NAME% 的設定資料夾到
echo( "%BACKUP_DIR%"
echo( 備份檔案將以當天日期時間命名,例如
echo( %SOFTWARE_NAME%備份[%DATETIME%].7z%COLOR_RESET%
echo(
echo --------------- 開始執行,請稍候 ---------------
echo(
timeout /t 3 >nul
REM --------------------------------------------------
REM 【階段3】設置備份檔案名稱並執行備份
REM --------------------------------------------------
echo( ==================================================
echo( [階段3] 正在執行備份操作...
set "BACKUP_FILE=%BACKUP_DIR%\%SOFTWARE_NAME%備份[%DATETIME%].7z"
if exist "%BACKUP_FILE%" (
del "%BACKUP_FILE%"
if !errorlevel! neq 0 (
echo( %COLOR_ERROR%[錯誤] 無法刪除舊備份檔案%COLOR_RESET%
timeout /t 1 >nul
if not defined SCHTASKS pause
exit /b 1
)
)
echo( %COLOR_INFO%[提示] 備份至:%BACKUP_FILE%%COLOR_RESET%
echo( ==================================================
echo( %COLOR_WARN% 正在執行 7-Zip 備份,請勿中斷%COLOR_RESET%
echo( ==================================================
REM --------------------------------------------------
REM 執行 7-Zip 備份命令,7-Zip排除指令【-xr!】在變數處設置
REM --------------------------------------------------
"%SEVEN_ZIP_PATH%" a -t7z -aoa -ssw -y "%BACKUP_FILE%" "%SRC_FOLDER1%" %COMPRESSION_LEVEL% -xr@"%EXCLUDE_FILE%"
if %errorlevel% equ 0 (
echo( ==================================================
echo( %COLOR_SUCCESS%[成功] %SOFTWARE_NAME%備份完成%COLOR_RESET%
echo( ==================================================
timeout /t 1 >nul
) else (
echo( ==================================================
echo( %COLOR_ERROR%[錯誤] %SOFTWARE_NAME%備份失敗,請檢查 7-Zip 是否正確安裝%COLOR_RESET%
echo( ==================================================
timeout /t 1 >nul
if not defined SCHTASKS pause
exit /b 1
)
REM --------------------------------------------------
REM 清理舊檔案
REM --------------------------------------------------
if exist "%EXCLUDE_FILE%" del "%EXCLUDE_FILE%" >nul 2>&1
REM --------------------------------------------------
REM 展示結束ASCII藝術字DONE
REM --------------------------------------------------
echo(
echo(________________
echo(^|_ \/ __ \^| \ ^| ^| ^|____^|
echo(^| ^| ^| ^|^| ^|^| ^| ^|\^| ^| ^| ^|__
echo(^| ^| ^| ^|^| ^|^| ^| ^| . ` ^| ^|__^|
echo(^| ^|/ / ^| ^|__^| ^| ^| ^|^\^| ^| ^|____
echo(^|___/\____/^|_^| \_^| ^|______^|
echo(
echo( ==================================================
echo( %COLOR_SUCCESS% [腳本執行完畢] 請按任意鍵結束 %COLOR_RESET%
echo( 備份壓縮檔已儲存至:"%BACKUP_DIR%"
echo( 還原時,請將壓縮檔內容解壓縮至:
echo( %COLOR_WARN%"%SRC_FOLDER1%"%COLOR_RESET%
echo( ==================================================
echo(
REM --------------------------------------------------
REM 播放「小星星」旋律
REM 1. 一閃一閃亮晶晶 (C, C, G, G, A, A, G)
REM 2. 滿天都是小星星 (F, F, E, E, D, D, C)
REM --------------------------------------------------
set "psfile=%TEMP%\twinkle_%RANDOM%.ps1"
if exist "%psfile%" del /f /q "%psfile%"
REM 寫入 PowerShell 腳本
echo # 定義音符頻率(以 C 調為基礎)>"%psfile%"
>>"%psfile%" echo $notes = @{
>>"%psfile%" echo"C" = 523
>>"%psfile%" echo"D" = 587
>>"%psfile%" echo"E" = 659
>>"%psfile%" echo"F" = 698
>>"%psfile%" echo"G" = 784
>>"%psfile%" echo"A" = 880
>>"%psfile%" echo }
>>"%psfile%" echo.
>>"%psfile%" echo # 定義旋律
>>"%psfile%" echo $melody1 = ^("C","C","G","G","A","A","G"^)
>>"%psfile%" echo $melody2 = ^("F","F","E","E","D","D","C"^)
>>"%psfile%" echo.
>>"%psfile%" echo # 設定播放參數
>>"%psfile%" echo $duration = 110
>>"%psfile%" echo $pauseDuration = 110
>>"%psfile%" echo.
>>"%psfile%" echo # 播放第一句
>>"%psfile%" echo foreach^( $note in $melody1 ^) {
>>"%psfile%" echo[console]::Beep($notes[$note], $duration)
>>"%psfile%" echoStart-Sleep -Milliseconds $pauseDuration
>>"%psfile%" echo }
>>"%psfile%" echo.
>>"%psfile%" echo # 句子間暫停
>>"%psfile%" echo Start-Sleep -Milliseconds $pauseDuration
>>"%psfile%" echo.
>>"%psfile%" echo # 播放第二句
>>"%psfile%" echo foreach^( $note in $melody2 ^) {
>>"%psfile%" echo[console]::Beep($notes[$note], $duration)
>>"%psfile%" echoStart-Sleep -Milliseconds $pauseDuration
>>"%psfile%" echo }
REM 執行並清理
powershell -NoProfile -ExecutionPolicy Bypass -File "%psfile%"
del /f /q "%psfile%" 2>nul
endlocal
if not defined SCHTASKS pause
exit /b 0
# 📸 批次檔輸出範例:



