Board logo

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

作者: lihui612ld    时间: 2018-11-16 23:44     标题: 识别硬盘数目然后跳转执行分区操作的批处理哪里出错了?求指点

  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比较,然后跳转执行分区操作
作者: lihui612ld    时间: 2018-11-16 23:45

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 命令直接跳出了循环
作者: lihui612ld    时间: 2018-11-17 01:03

想了一晚上  多个循环的搞不定  不只是goto的问题
作者: flashercs    时间: 2018-11-17 01:32

本帖最后由 flashercs 于 2018-11-17 01:34 编辑

bat的for跟其他语言不一样,for其实是一行命令;故for里面一定不能用goto
作者: lihui612ld    时间: 2018-11-17 01:38

回复 4# flashercs


我找了好久,其实是for循环嵌套造成的
作者: flashercs    时间: 2018-11-17 01:42

回复 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
复制代码

作者: lihui612ld    时间: 2018-11-17 01:46

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
请按任意键继续. . .
作者: lihui612ld    时间: 2018-11-17 12:35

回复 6# flashercs


  我用CALL 命令提示不能跳转 ,才发现没打 :
作者: lihui612ld    时间: 2018-11-17 12:37

回复 6# flashercs


    如果我要在aa:下用到变量%%e有什么办法吗?
作者: flashercs    时间: 2018-11-17 15:01

本帖最后由 flashercs 于 2018-11-17 15:02 编辑

回复 9# lihui612ld


    传递参数 call :aa  %%e
aa下就是%1
作者: lihui612ld    时间: 2018-11-18 21:25

回复 10# flashercs


    这里不懂  能说详细点吗?
作者: smss    时间: 2019-4-6 23:32

echo off
color 24
del *txt
for /f "tokens=2,3" %%a in (' "echo list disk | diskpart" ') do (
   ...
lihui612ld 发表于 2018-11-17 01:46


楼主解决了吗?还在寻找偷懒的路上越走越远?
作者: lihui612ld    时间: 2019-8-5 11:44

回复 12# smss


    解决了,不过要创建文件




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2