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

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

  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比较,然后跳转执行分区操作

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 命令直接跳出了循环

TOP

想了一晚上  多个循环的搞不定  不只是goto的问题

TOP

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

bat的for跟其他语言不一样,for其实是一行命令;故for里面一定不能用goto

TOP

回复 4# flashercs


我找了好久,其实是for循环嵌套造成的

TOP

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

TOP

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
请按任意键继续. . .

TOP

回复 6# flashercs


  我用CALL 命令提示不能跳转 ,才发现没打 :

TOP

回复 6# flashercs


    如果我要在aa:下用到变量%%e有什么办法吗?

TOP

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

回复 9# lihui612ld


    传递参数 call :aa  %%e
aa下就是%1

TOP

回复 10# flashercs


    这里不懂  能说详细点吗?

TOP

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


楼主解决了吗?还在寻找偷懒的路上越走越远?

TOP

回复 12# smss


    解决了,不过要创建文件

TOP

返回列表