找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30072|回复: 12

[特效代码] 识别硬盘数目然后跳转执行分区操作的批处理哪里出错了?求指点

[复制链接]
发表于 2018-11-16 23:44:38 | 显示全部楼层 |阅读模式
  1. @echo off
  2. color 24
  3. del *txt
  4. for /f "tokens=2,3" %%a in (' "echo list disk | diskpart" ') do (
  5.         if %%a==%%a set "num=%%a"
  6. )
  7. set /a "d=%num%"
  8. echo 有%d%个硬盘请确认
  9. set /a "f=%d%"-1
  10. for /l %%e in (0 1 %f%) do (
  11. partassist.exe /list:%e% /capacity /out:a.txt
  12. )
  13. for /f "skip=4 delims=|. tokens=2" %%p in (a.txt) do (
  14. echo %%p
  15. if %%p geq 60 goto aa
  16. if %%p lss 60 goto bb

  17. :aa ; 2分区方案
  18. echo 1
  19. pause
  20. goto eof

  21. :bb ;3分区方案
  22. echo 2
  23. pause
  24. goto eof
  25. )
复制代码
这段代码是用自动识别当前主机硬盘数目,用傲梅分区将硬盘容量输出到a.txt,然后用for读取a.txt里的内容获取硬盘容量并与60比较,然后跳转执行分区操作
 楼主| 发表于 2018-11-16 23:45:58 | 显示全部楼层
for /f "skip=4 delims=|. tokens=2" %%p in (a.txt) do (
echo %%p
if %%p geq 60 goto aa
if %%p lss 70 goto bb

:aa ; 2分区方案
echo 1
pause
goto eof

:bb ;3分区方案
echo 2
pause
goto eof
)
主要是这段代码无法正常  是不是因为for里面用了GOTO 命令直接跳出了循环
 楼主| 发表于 2018-11-17 01:03:11 | 显示全部楼层
想了一晚上  多个循环的搞不定  不只是goto的问题
发表于 2018-11-17 01:32:57 | 显示全部楼层
本帖最后由 flashercs 于 2018-11-17 01:34 编辑

bat的for跟其他语言不一样,for其实是一行命令;故for里面一定不能用goto
 楼主| 发表于 2018-11-17 01:38:54 | 显示全部楼层
回复 4# flashercs


我找了好久,其实是for循环嵌套造成的
发表于 2018-11-17 01:42:33 | 显示全部楼层
回复 5# lihui612ld
  1. for /f "skip=4 delims=|. tokens=2" %%p in (a.txt) do (
  2.     echo %%p
  3.     if %%p geq 60 (
  4.         call :aa
  5.     ) else (
  6.         call :bb
  7.     )
  8. )
  9. exit /b

  10. REM 2分区方案
  11. :aa
  12. echo 1
  13. pause
  14. exit /b

  15. REM 3分区方案
  16. :bb
  17. echo 2
  18. pause
  19. exit /b
复制代码
 楼主| 发表于 2018-11-17 01:46:48 | 显示全部楼层
echo off
color 24
del *txt
for /f "tokens=2,3" %%a in (' "echo list disk | diskpart" ') do (
        if %%a==%%a set "num=%%a"
)
set /a "d=%num%"
echo 有%d%个硬盘请确认
set /a "f=%d%"-1

for /l %%e in (0 1 %f%) do (
echo %%e>>b.txt
partassist.exe /list:%e% /capacity /out:a.txt
for /f "skip=4 delims=|. tokens=2" %%p in (a.txt) do (
echo %%p
echo %%e
pause
)
)
这是我改后的代码,for循环嵌套造成命令显示如下

F:\1Autoghost\PACMDforUSB>echo off
有3个硬盘请确认
167
0
请按任意键继续. . .
111
0
请按任意键继续. . .
465
0
请按任意键继续. . .
58
0
请按任意键继续. . .
167
1
请按任意键继续. . .
111
1
请按任意键继续. . .
465
1
请按任意键继续. . .
58
1
请按任意键继续. . .
 楼主| 发表于 2018-11-17 12:35:19 | 显示全部楼层
回复 6# flashercs


  我用CALL 命令提示不能跳转 ,才发现没打 :
 楼主| 发表于 2018-11-17 12:37:12 | 显示全部楼层
回复 6# flashercs


    如果我要在aa:下用到变量%%e有什么办法吗?
发表于 2018-11-17 15:01:11 | 显示全部楼层
本帖最后由 flashercs 于 2018-11-17 15:02 编辑

回复 9# lihui612ld


    传递参数 call :aa  %%e
aa下就是%1
 楼主| 发表于 2018-11-18 21:25:59 | 显示全部楼层
回复 10# flashercs


    这里不懂  能说详细点吗?
发表于 2019-4-6 23:32:25 | 显示全部楼层
echo off
color 24
del *txt
for /f "tokens=2,3" %%a in (' "echo list disk | diskpart" ') do (
   ...
lihui612ld 发表于 2018-11-17 01:46


楼主解决了吗?还在寻找偷懒的路上越走越远?
 楼主| 发表于 2019-8-5 11:44:15 | 显示全部楼层
回复 12# smss


    解决了,不过要创建文件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:16 , Processed in 0.029990 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表