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

[文本处理] 批处理如何调用名字不定的变量?

比如我用set命令定义多个变量:
  1. set a=1
  2. :s
  3. set /p b%a%="输入变量 :"
  4. set /a a+=1
  5. if %a%==5 (
  6. goto end
  7. ) else (
  8. goto s
  9. )
  10. :end
  11. pause
复制代码
那么是否有什么办法调用上面已经定义的变量,比如在最后用echo将它们的内容显示出来?
其实我的目的是想批量生成有规律的变量(像上面的b1、b2、b3、b4),但是还想不出什么办法调用它们,望高手能指点指点~

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=10
  4. for /l %%a in (1,1,5) do (
  5.     set b_%%a=!n!
  6.     set /a n+=1
  7. )
  8. set b_
复制代码

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=10
  4. for /l %%a in (1,1,5) do (
  5.     set b_%%a=!n!
  6.     set /a n+=1
  7.     echo b_%%a的值是:!b_%%a!
  8. )
复制代码

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. :s
  5. set /a n+=1
  6. set /p b%n%="输入变量 :"
  7. if %n%==5 (
  8.     goto :end
  9. ) else (
  10.     goto :s
  11. )
  12. :end
  13. for /l %%a in (1,1,%n%) do (
  14.     echo !b%%a!
  15. )
  16. pause
复制代码

TOP

回复 4# BAT-VBS


    喔,利用变量延迟的!号来跟%号区分开调用,虽然感觉这样用法还是有一点点不满意,毕竟这样就要每次都写定义变量延迟这行代码,不过还是谢谢你~

TOP

回复 5# kuuoo


    要想满意的话,可能需要自己重新开发一个CMD

TOP

回复 6# BAT-VBS


    现在有另外一个问题,我的想法是这样的:先不考虑输入的是不是第一个参数,如果输入0,则当次输入的参数改成跟上一次输入的参数一样,但按照下面的代码,如果最后一个参数输入0,并不能改成跟上一个参数一样,到底是什么问题呢?请指教~先多嘞个谢~
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. :s
  5. set /a n+=1
  6. set /p b%n%="输入变量 :"
  7. if %n%==5 (
  8.     goto :end
  9. ) else if !b%n%! equ 0 (
  10.     set b%n%=%k%
  11. goto s
  12.     ) else (
  13.     set k=!b%n%!
  14.     goto s
  15. )
  16. :end
  17.    echo !b1! oo !b2! oo !b3! oo !b4! oo !b5!
  18. )
  19. pause
复制代码

TOP

回复 7# kuuoo
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. :s
  5. set /a n+=1
  6. set /p b%n%="输入变量 :"
  7. if %n%==5 (
  8.     goto :end
  9. ) else if !b%n%! equ 0 (
  10.     set b%n%=!k!
  11.         goto :s
  12. ) else (
  13.     set k=!b%n%!
  14.     goto :s
  15. )
  16. :end
  17. echo !b1! oo !b2! oo !b3! oo !b4! oo !b5!
  18. pause
复制代码

TOP

回复 8# BAT-VBS

没什么变化啊...一样是0

TOP

本帖最后由 Taurus 于 2012-12-9 06:59 编辑
回复  BAT-VBS


    现在有另外一个问题,我的想法是这样的:先不考虑输入的是不是第一个参数,如果输 ...
kuuoo 发表于 2012-12-1 21:47


暈哦~

你仔細讀清楚你的流程吧
"if %n%==5 goto :end" 一句排位先於處理變量為0時的處理工作 , 那當然是只要%n%是5 , 就立即直接跳到:end而不再處理變量啦
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. :s
  5. set /a n+=1
  6. set /p b%n%="輸入變量 :"
  7. if !b%n%! equ 0 set b%n%=%1
  8. if %n%==5 goto :end
  9. call :s !b%n%!
  10. :end
  11. set/p= !b1! oo !b2! oo !b3! oo !b4! oo !b5!
  12. <
复制代码
不喜歡用setlocal enabledelayedexpansion , 就用call set N=%%N%%代朁哦 , 自己想想法子吧ok?
  1. @echo off
  2. :s
  3. set/a n+=1
  4. set/p b%n%="輸入變量 :"
  5. call set X=%%b%n%%%
  6. if %X% EQU 0 set b%n%=%1
  7. if %n% LSS 5 call :s %X%
  8. set/p=%b1% oo %b2% oo %b3% oo %b4% oo %b5%
  9. <
复制代码
带内地用语或带里语的文章,在下读写总觉有点吃力;
如误解了各位意思的讲勿见怪   ^_^

TOP

回复 10# Taurus

真不好意思我没想到这点,说实话虽然看过教程,但是各种命令综合运用我还是不会,还好能看得懂你的代码,很清楚,谢谢你啦~之后的代码我会尽量自己想的
1

评分人数

    • Taurus: 有禮貌 , 送你一個技術分破蛋 :)技术 + 1

TOP

回复 11# kuuoo


    多写代码就好了

TOP

返回列表