|
|
本帖最后由 23070205 于 2026-5-11 22:06 编辑
- @echo off
- title 卷影副本全能工具箱 PE通用版
- net session >nul 2>&1
- if %errorlevel% neq 0 (
- echo 错误:需要管理员权限!
- echo 请右键此脚本选择“以管理员身份运行”。
- pause
- exit /b
- )
- mode con cols=100 lines=30
- where powershell >nul 2>&1
- if %errorlevel% neq 0 (
- echo 警告:当前环境未安装 PowerShell,部分功能将不可用。
- echo 按任意键,退出批处理...
- pause >nul
- exit /b
- )
- :menu
- cls
- echo ==============================================================
- echo 卷影副本 全能工具箱(自动空闲盘符版)
- echo ==============================================================
- echo 1. 创建C盘卷影 + 自动找空闲盘符挂载并打开
- echo 2. 卸载本次挂载的卷影盘符
- echo 3. 查看所有卷影副本列表
- echo 4. 查看卷影副本空间占用
- echo 5. 智能删除:全局选序号删除任意卷影
- echo 6. 只删除C盘卷影(列表选序号)
- echo 7. 只删除D盘卷影(列表选序号)
- echo 8. 自选任意盘符,删除对应卷影
- echo 9. 一键清空所有卷影副本
- echo 0. 退出工具箱
- echo ==============================================================
- set /p sel=请输入功能序号:
- if "%sel%"=="1" goto op1
- if "%sel%"=="2" goto op2
- if "%sel%"=="3" goto op3
- if "%sel%"=="4" goto op4
- if "%sel%"=="5" goto op5
- if "%sel%"=="6" goto op6
- if "%sel%"=="7" goto op7
- if "%sel%"=="8" goto op8
- if "%sel%"=="9" goto op9
- if "%sel%"=="0" exit
- goto menu
- :op1
- echo 正在创建C盘卷影副本...
- powershell "(Get-CimInstance -List Win32_ShadowCopy).Create('C:\', 'ClientAccessible')"
- echo 正在自动寻找空闲盘符并挂载...
- powershell -Command ^
- $used = (Get-CimInstance win32_logicaldisk).DeviceID; ^
- $all = ForEach($c in 'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'){$c+':'}; ^
- $free = $all | Where-Object {$_ -notin $used} | Select -First 1; ^
- if(-not $free){Write-Host 无空闲可用盘符!;Read-Host;exit}; ^
- $s = Get-CimInstance Win32_ShadowCopy|Sort InstallDate -Desc|Select -First 1; ^
- $p = "\\?\GLOBALROOT" + $s.DeviceObject + "\"; ^
- subst $free $p; ^
- echo 已自动挂载为:$free; ^
- $free | Out-File $env:temp\shadow_drive.txt; ^
- Start $free
- echo 完成!已自动打开挂载盘符
- pause
- goto menu
- :op2
- if not exist "%temp%\shadow_drive.txt" (
- echo 未检测到本次挂载的卷影盘符
- pause
- goto menu
- )
- set /p Drv=<"%temp%\shadow_drive.txt"
- subst %Drv% /d >nul 2>&1
- del /f /q "%temp%\shadow_drive.txt" >nul 2>&1
- echo 已成功卸载挂载盘符 %Drv%
- pause
- goto menu
- :op3
- vssadmin list shadows
- pause
- goto menu
- :op4
- vssadmin list shadowstorage
- pause
- goto menu
- :op5
- powershell -Command "$arr=@();$i=1;Get-CimInstance Win32_ShadowCopy|ForEach-Object{Write-Host $i. 盘符:$_.VolumeName ID:$_.ID;$arr+=$_.ID;$i++};$arr|Export-Clixml $env:temp\all_shadow.xml"
- set /p num=输入要删除序号:
- powershell "$arr=Import-Clixml $env:temp\all_shadow.xml;$id=$arr[%num%-1];vssadmin delete shadows /shadow=$id /quiet"
- del /f /q "%temp%\all_shadow.xml" >nul 2>&1
- echo 删除完成
- pause
- goto menu
- :op6
- powershell -Command "$list=@();$i=1;Get-CimInstance Win32_ShadowCopy|Where-Object {$_.VolumeName -eq 'C:\'}|ForEach-Object{Write-Host $i. ID:$_.ID;$list += $_.ID;$i++};if($list.Count -eq 0){Write-Host C盘无卷影副本;exit 99};$list|Export-Clixml $env:temp\c_shadow.xml"
- if %errorlevel% equ 99 (pause&goto menu)
- set /p n=输入序号:
- powershell "$a=Import-Clixml $env:temp\c_shadow.xml;$id=$a[%n%-1];vssadmin delete shadows /shadow=$id /quiet"
- del /f /q "%temp%\c_shadow.xml" >nul 2>&1
- echo 删除完成
- pause
- goto menu
- :op7
- powershell -Command "$list=@();$i=1;Get-CimInstance Win32_ShadowCopy|Where-Object {$_.VolumeName -eq 'D:\'}|ForEach-Object{Write-Host $i. ID:$_.ID;$list += $_.ID;$i++};if($list.Count -eq 0){Write-Host D盘无卷影副本;exit 99};$list|Export-Clixml $env:temp\d_shadow.xml"
- if %errorlevel% equ 99 (pause&goto menu)
- set /p n=输入序号:
- powershell "$a=Import-Clixml $env:temp\d_shadow.xml;$id=$a[%n%-1];vssadmin delete shadows /shadow=$id /quiet"
- del /f /q "%temp%\d_shadow.xml" >nul 2>&1
- echo 删除完成
- pause
- goto menu
- :op8
- cls
- set /p Drive=输入盘符(如C:\ D:\):
- powershell -Command "$disk='%Drive%';$list=@();$idx=1;Get-CimInstance Win32_ShadowCopy|Where-Object {$_.VolumeName -eq $disk}|ForEach-Object{Write-Host 第$idx个 ID:$_.ID;$list+=$_.ID;$idx++};if($list.Count -eq 0){Write-Host 该盘无卷影副本;exit 99};$list|Export-Clixml $env:temp\sel_drive_shadow.xml"
- if %errorlevel% equ 99 (pause&goto menu)
- set /p No=输入删除序号:
- powershell -Command "$arr=Import-Clixml $env:temp\sel_drive_shadow.xml;$delId=$arr[%No%-1];vssadmin delete shadows /shadow=$delId /quiet"
- del /f /q "%temp%\sel_drive_shadow.xml" >nul 2>&1
- echo 删除完成
- pause
- goto menu
- :op9
- vssadmin delete shadows /all /quiet
- echo 已清空所有卷影副本
- pause
- goto menu
复制代码
保存以上内容为bat文件,可以直接在线生成卷影副本,无须到pe生成。
😄恢复肯定要到pe下了。
大家可以虚拟机测试一下,是否有效。
刚刚生成的,没有测试。 |
|