[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 idwma 于 2021-8-7 18:13 编辑

不清楚pe里bat是默认管理员权限运行的吗
弹框外面不能套括号改了一下
  1. @echo off&setlocal enabledelayedexpansion
  2. chcp 437
  3. for /f "delims=" %%i in ('^(echo list disk ^)^|diskpart^|find "Online"') do set/a n+=1
  4. set/a n=!n!-1
  5. for /l %%i in (0,1,!n!) do ((echo select disk %%i &echo detail disk)|diskpart|findstr /i "volume.*no" &&set f=%%i)
  6. if not defined f start mshta vbscript:msgbox("没找到卷标为no的分区",0,"%提醒%")(window.close)&&exit
  7. for /l %%i in (0,1,!n!) do (
  8. for /f "tokens=2,3 delims= " %%a in ('^(echo select disk %%i ^&echo detail disk^)^|diskpart^|findstr /i "volume.*no"') do (
  9. if exist %%b:\window\system32 (
  10. (echo select disk %%i
  11. echo select volume %%a
  12. echo delete volume)|diskpart
  13. for /f "tokens=2 delims= " %%c in ('^(echo select disk %%i ^&echo list part^)^|diskpart^|findstr "system Reserved Recovery"') do (
  14. if not "%%c"=="" (
  15. (echo sel disk %%i
  16. echo sel part %%c
  17. echo del part override)|diskpart)
  18. )
  19. )
  20. )
  21. )
  22. pause
复制代码

TOP

那再换一个方式
  1. @echo off&setlocal enabledelayedexpansion
  2. chcp 437
  3. echo list vol|diskpart|findstr /i "volume.*no" &&set f=1
  4. if not defined f start mshta vbscript:msgbox("没找到卷标为no的分区",0,"%提醒%")(window.close)&&exit
  5. for /f "tokens=2,3 delims= " %%a in ('echo list vol^|diskpart^|findstr /i "volume.*no"') do (
  6. if exist %%b:\window\system32 (
  7. (echo select volume %%a
  8. echo delete volume)|diskpart
  9. for /f "tokens=2 delims=* " %%c in ('^(echo sel vol %%a ^&echo list part^)^|diskpart^|findstr "system Reserved Recovery"') do (
  10. (echo select volume %%a
  11. echo sel part %%c
  12. echo del part override)|diskpart
  13. )
  14. )
  15. )
  16. pause
复制代码

TOP

回复 8# 5i365

一样的吧我试了一下这样也可以删

TOP

尴尬呀复制你给的信息,有没发现这行少了什么if exist %%b:\windows\system32 (

TOP

本帖最后由 idwma 于 2021-8-8 15:03 编辑

再改一下加个判断
还是套娃嘛一层不行就两层...
  1. @echo off&setlocal enabledelayedexpansion
  2. chcp 437
  3. echo list vol|diskpart|findstr /i "volume.*no" &&set f=1
  4. if not defined f start mshta vbscript:msgbox("没找到卷标为no的分区",0,"%提醒%")(window.close)&&exit
  5. for /f "tokens=2,3 delims= " %%a in ('echo list vol^|diskpart^|findstr /i "volume.*no"') do (
  6. if exist %%b:\windows\system32 (
  7. (echo select volume %%a
  8. echo delete volume)|diskpart
  9. call :re
  10. for /f "tokens=2 delims=* " %%c in ('^(echo sel vol %%a ^&echo list disk^)^|diskpart^|findstr "*"') do set disk=%%c
  11. )
  12. )
  13. :ll
  14. for /f "tokens=2 delims= " %%a in ('echo list vol^|diskpart^|findstr /i "volume.*no"') do (
  15. for /f "tokens=2 delims=* " %%b in ('^(echo sel vol %%a ^&echo list disk^)^|diskpart^|findstr "*"') do (
  16. if "!disk!"=="%%b" (
  17. (echo select volume %%a
  18. echo delete volume)|diskpart
  19. goto :ll
  20. )
  21. )
  22. )
  23. pause
  24. goto :eof
  25. :re
  26. for /f "tokens=2 delims=* " %%c in ('^(echo sel vol %%a ^&echo list part^)^|diskpart^|findstr "System Reserved Recovery"') do (
  27. if not "%%c"=="" (
  28. (echo select volume %%a
  29. echo sel part %%c
  30. echo del part override)|diskpart
  31. goto :re
  32. )
  33. )
复制代码

TOP

回复 29# 5i365


那再改一下换个方式
  1. @echo off
  2. chcp 437
  3. echo list vol|diskpart|findstr /i "volume.*no" &&set f=1
  4. if not defined f start mshta vbscript:msgbox("没找到卷标为no的分区",0,"%提醒%")(window.close)&&exit
  5. for /f "tokens=2,3 delims= " %%a in ('echo list vol^|diskpart^|findstr /i "volume.*no"') do (
  6. if exist %%b:\windows\system32 (
  7. (echo select volume %%a
  8. echo delete volume)|diskpart
  9. for /f "tokens=2 delims=* " %%c in ('^(echo sel vol %%a ^&echo list disk^)^|diskpart^|findstr "*"') do set disk=%%c
  10. )
  11. )
  12. :re
  13. for /f "tokens=2 delims= " %%c in ('^(echo select disk %disk% ^&echo list part^)^|diskpart^|findstr /i "System Reserved Recovery"') do (
  14. if not "%%c"=="" (
  15. (echo sel disk %disk%
  16. echo sel part %%c
  17. echo del part override)|diskpart
  18. goto :re
  19. )
  20. )
  21. :ll
  22. for /f "tokens=2 delims= " %%a in ('^(echo select disk %disk% ^&echo detail disk^)^|diskpart^|findstr /i "volume.*no"') do (
  23. if not "%%a"=="" (
  24. (echo select volume %%a
  25. echo delete volume)|diskpart
  26. goto :ll
  27. )
  28. )
  29. pause
复制代码
1

评分人数

TOP

通用定位有windows目录的卷来定位硬盘也一样的,可以少循环几次

TOP

回复 33# 5i365


    每次删完一个分区顺序会变,要重新获取一次位置这步省不了是慢一点

TOP

本帖最后由 idwma 于 2021-8-8 17:54 编辑

回复 36# 5i365

你看11行就是定位硬盘一样的
    不太清楚这样是不是顺序不会变可以试试
  1. @echo off
  2. if exist dsk.txt del dsk.txt
  3. chcp 437
  4. echo list vol|diskpart|findstr /i "volume.*no" &&set f=1
  5. if not defined f start mshta vbscript:msgbox("没找到卷标为no的分区",0,"%提醒%")(window.close)&&exit
  6. for /f "tokens=2,3 delims= " %%a in ('echo list vol^|diskpart^|findstr /i "volume.*no"') do (
  7. if exist %%b:\windows\system32 (
  8. for /f "tokens=2 delims=* " %%c in ('^(echo sel vol %%a ^&echo list disk^)^|diskpart^|findstr "*"') do set disk=%%c &BOOTICE /DEVICE=%%c /mbr /backup /sectors=1 /quiet /file=MBR_Bak
  9. (echo select volume %%a
  10. echo delete volume)|diskpart
  11. )
  12. )
  13. for /f "tokens=2 delims= " %%c in ('^(echo select disk %disk% ^&echo list part^)^|diskpart^|findstr /i "System Reserved Recovery"') do (
  14. if not "%%c"=="" (
  15. (echo sel disk %disk%
  16. echo sel part %%c
  17. echo del part override)>>dsk.txt
  18. )
  19. )
  20. for /f "tokens=2 delims= " %%a in ('^(echo select disk %disk% ^&echo detail disk^)^|diskpart^|findstr /i "volume.*no"') do (
  21. if not "%%a"=="" (
  22. (echo select volume %%a
  23. echo delete volume)>>dsk.txt
  24. )
  25. )
  26. echo;exit>>dsk.txt
  27. if exist dsk.txt diskpart /s dsk.txt
  28. del dsk.txt
  29. for /f "tokens=3 delims= " %%c in ('echo list vol^|diskpart^|findstr /i "volume.*data"') do set data_pf=%%c
  30. set no_yph=%disk%
  31. pause
复制代码

TOP

回复 40# 5i365


    改了,应该可正常备份了
方法一不稳

TOP

回复 45# 5i365


    提示的中文显示多加个判断
变量的后面习惯性的多打了个空格
  1. @echo off
  2. chcp 437
  3. echo list vol|diskpart|findstr /i "volume.*no" &&set f=1||chcp 936
  4. if not defined f start mshta vbscript:msgbox("没找到卷标为no的分区",0,"%提醒%")(window.close)&&exit
  5. if exist dsk.txt del dsk.txt
  6. for /f "tokens=2,3 delims= " %%a in ('echo list vol^|diskpart^|findstr /i "volume.*no"') do (
  7. if exist %%b:\windows\system32 (
  8. for /f "tokens=2 delims=* " %%c in ('^(echo sel vol %%a ^&echo list disk^)^|diskpart^|findstr "*"') do set disk=%%c&BOOTICE /DEVICE=%%c /mbr /backup /sectors=1 /quiet /file=MBR_Bak
  9. (echo select volume %%a
  10. echo delete volume)|diskpart
  11. )
  12. )
  13. for /f "tokens=2 delims= " %%c in ('^(echo select disk %disk% ^&echo list part^)^|diskpart^|findstr /i "System Reserved Recovery"') do (
  14. if not "%%c"=="" (
  15. (echo sel disk %disk%
  16. echo sel part %%c
  17. echo del part override)>>dsk.txt
  18. )
  19. )
  20. for /f "tokens=2 delims= " %%a in ('^(echo select disk %disk% ^&echo detail disk^)^|diskpart^|findstr /i "volume.*no"') do (
  21. if not "%%a"=="" (
  22. (echo select volume %%a
  23. echo delete volume)>>dsk.txt
  24. )
  25. )
  26. echo;exit>>dsk.txt
  27. if exist dsk.txt diskpart /s dsk.txt
  28. del dsk.txt
  29. for /f "tokens=3 delims= " %%c in ('echo list vol^|diskpart^|findstr /i "volume.*data"') do set data_pf=%%c
  30. set no_yph=%disk%
  31. pause
复制代码
1

评分人数

TOP

  1. for /f "tokens=2 delims= " %%c in ('^(echo sel disk %disk% ^&echo list part^)^|diskpart^|findstr /i "Partition.*B"') do (
  2. ((echo sel disk %disk%
  3. echo sel partition %%c
  4. echo detail partition)|diskpart|findstr /i "C12A7328-F81F-11D2-BA4B-00A0C93EC93B DE94BBA4-06D1-4D40-A16A-BFD50179D6AC E3C9E316-0B5C-4DB8-817D-F92DF00215AE 其它系统下分区类型的ID"
  5. )&&(
  6. (echo sel disk %disk%
  7. echo sel part %%c
  8. echo del part override)>>dsk.txt
  9. )
  10. )
复制代码
回复 47# 5i365

TOP

返回列表