|
|
发表于 2026-5-9 16:25:43
|
显示全部楼层
本帖最后由 oym2016 于 2026-5-9 16:35 编辑
因wmic.exe被取消,没事请教AI 将脚本改了一下:
@echo off&pushd %~dp0
@echo 开始运行时间 %date% %time%
@echo 切换工作目录到脚本所在目录 %~dp0
@echo 检测管理员权限
bcdedit > nul
if %errorlevel% neq 0 @echo 没有管理员权限 && goto end
::配置文件WimScript.ini
if not exist WimScript.ini call :xml
::检测 Vss 服务
sc config VSS start=demand
::检测 D:\C 链接
if exist d:\c rmdir d:\c
@echo.&echo 创建c盘快照......稍等......
for /f "delims=" %%i in ('powershell -Command "(Get-WmiObject -List Win32_ShadowCopy).Create('C:\', 'ClientAccessible') | ForEach-Object { $_.ShadowID }"') do set "ShadowID=%%i"
::查寻id编号 copy编号:
@echo ID编号:%ShadowID%
vssadmin List Shadows /Shadow=%ShadowID% > ret_tmp.log
for /f "eol=; tokens=2,3* delims=: " %%i in ('type ret_tmp.log ^| findstr "\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy"') do (
@echo Copy编号:%%i
set vs=%%i\
)
::必须在D:\C目录下,因为排除规则里面预置了C目录
if exist D:\C (
@echo 已经存在 D:\C,目录冲突,请删除或重命名原来的 D:\C
goto end
) else (
@echo.&echo D:\C目录 检测通过
mklink /D D:\C %vs%
if %errorlevel% neq 0 @echo 创建链接错误 && goto end
)
set name=%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%%time:~6,2%
::如果有空格,把空格替换为0
set name=%name: =0%
@echo.&echo 备份镜像名称:Win-%name%
::检查目录下的文件:
if not exist d:\c\Windows (
@echo 错误:快照目录下的文件没有windows目录
goto exit
)else (
@echo D:\C\Windows 目录检查通过
)
@echo.&echo 如果关闭defender实时保护,备份很快!
@echo.&echo 备份确认!.....
@echo.&set/p user_select= Save image input: "y" ; discard changes: "Enter key"
if !user_select! equ y (
if exist WinOS.wim (
@echo.&echo 追加wim:
Dism.exe /Append-Image /ImageFile:WinOS.wim /CaptureDir:D:\C\ /Name:Win-%name% /ConfigFile:WimScript.ini
) else (
@echo.&echo 新建wim:
Dism.exe /Capture-Image /ImageFile:WinOS.wim /CaptureDir:D:\C\ /Compress:fast /Name:Win-%name% /ConfigFile:WimScript.ini
)
)
::删除临时目录链接:
rmdir d:\c
if %errorlevel% neq 0 @echo 创建链接失败,请手动删除 rmdir d:\c
@echo.&echo 删除快照:
vssadmin Delete Shadows /Shadow=%ShadowID% /Quiet
if %errorlevel% neq 0 @echo 删除快照失败,请手动删除Shadow=%ShadowID%
@echo 检查是否删除了快照,找不到则正确:
vssadmin List Shadows /Shadow=%ShadowID%
::删除所有快照的命令是 vssadmin Delete Shadows /for=c: /Quiet
goto end
:end
@echo.&echo 结束运行时间: %date% %time%
if exist WinScript.ini del /q WinScript.ini
if exist ret_tmp.log del /q ret_tmp.log
@echo 程序退出
pause
exit
:xml
set xml=WinScript.ini
echo ^[ExclusionList^] > %xml%
echo ^\$ntfs.log >> %xml%
echo ^\hiberfil.sys >> %xml%
echo ^\pagefile.sys >> %xml%
echo ^\swapfile.sys >> %xml%
echo ^\System Volume Information >> %xml%
echo ^\RECYCLER >> %xml%
echo ^\Windows^\CSC >> %xml%
echo ^\$Recycle.Bin >> %xml%
echo ^\Users^\tick^\OneDrive >> %xml%
echo ^\C^\Users^\tick^\OneDrive >> %xml%
echo ^\C^\$ntfs.log >> %xml%
echo ^\C^\hiberfil.sys >> %xml%
echo ^\C^\pagefile.sys >> %xml%
echo ^\C^\swapfile.sys >> %xml%
echo ^\C^\System Volume Information >> %xml%
echo ^\C^\RECYCLER >> %xml%
echo ^\C^\Windows^\CSC >> %xml%
echo ^\C^\$Recycle.Bin >> %xml%
echo ^[CompressionExclusionList^] >> %xml%
echo ^*.mp3 >> %xml%
echo ^*.zip >> %xml%
echo ^*.cab >> %xml%
echo ^\WINDOWS^\inf^\*.pnf >> %xml%
echo ^\C^\WINDOWS^\inf^\*.pnf >> %xml%
if exist %xml% echo WimScript.ini 配置成功
goto :eof
|
|