标题: [文本处理] 批处理如何调用名字不定的变量? [打印本页]
作者: kuuoo 时间: 2012-11-25 11:03 标题: 批处理如何调用名字不定的变量?
比如我用set命令定义多个变量:- set a=1
- :s
- set /p b%a%="输入变量 :"
- set /a a+=1
- if %a%==5 (
- goto end
- ) else (
- goto s
- )
- :end
- pause
复制代码
那么是否有什么办法调用上面已经定义的变量,比如在最后用echo将它们的内容显示出来?
其实我的目的是想批量生成有规律的变量(像上面的b1、b2、b3、b4),但是还想不出什么办法调用它们,望高手能指点指点~
作者: BAT-VBS 时间: 2012-11-25 11:20
- @echo off
- setlocal enabledelayedexpansion
- set n=10
- for /l %%a in (1,1,5) do (
- set b_%%a=!n!
- set /a n+=1
- )
- set b_
复制代码
作者: BAT-VBS 时间: 2012-11-25 11:26
- @echo off
- setlocal enabledelayedexpansion
- set n=10
- for /l %%a in (1,1,5) do (
- set b_%%a=!n!
- set /a n+=1
- echo b_%%a的值是:!b_%%a!
- )
复制代码
作者: BAT-VBS 时间: 2012-11-25 11:32
- @echo off
- setlocal enabledelayedexpansion
- set n=0
- :s
- set /a n+=1
- set /p b%n%="输入变量 :"
- if %n%==5 (
- goto :end
- ) else (
- goto :s
- )
- :end
- for /l %%a in (1,1,%n%) do (
- echo !b%%a!
- )
- pause
复制代码
作者: kuuoo 时间: 2012-11-25 12:01
回复 4# BAT-VBS
喔,利用变量延迟的!号来跟%号区分开调用,虽然感觉这样用法还是有一点点不满意,毕竟这样就要每次都写定义变量延迟这行代码,不过还是谢谢你~
作者: BAT-VBS 时间: 2012-11-25 22:18
回复 5# kuuoo
要想满意的话,可能需要自己重新开发一个CMD
作者: kuuoo 时间: 2012-12-1 21:47
回复 6# BAT-VBS
现在有另外一个问题,我的想法是这样的:先不考虑输入的是不是第一个参数,如果输入0,则当次输入的参数改成跟上一次输入的参数一样,但按照下面的代码,如果最后一个参数输入0,并不能改成跟上一个参数一样,到底是什么问题呢?请指教~先多嘞个谢~- @echo off
- setlocal enabledelayedexpansion
- set n=0
- :s
- set /a n+=1
- set /p b%n%="输入变量 :"
- if %n%==5 (
- goto :end
- ) else if !b%n%! equ 0 (
- set b%n%=%k%
- goto s
- ) else (
- set k=!b%n%!
- goto s
- )
- :end
- echo !b1! oo !b2! oo !b3! oo !b4! oo !b5!
- )
- pause
复制代码
作者: BAT-VBS 时间: 2012-12-1 22:40
回复 7# kuuoo - @echo off
- setlocal enabledelayedexpansion
- set n=0
- :s
- set /a n+=1
- set /p b%n%="输入变量 :"
- if %n%==5 (
- goto :end
- ) else if !b%n%! equ 0 (
- set b%n%=!k!
- goto :s
- ) else (
- set k=!b%n%!
- goto :s
- )
-
- :end
- echo !b1! oo !b2! oo !b3! oo !b4! oo !b5!
- pause
复制代码
作者: kuuoo 时间: 2012-12-8 21:17
回复 8# BAT-VBS
没什么变化啊...一样是0
作者: Taurus 时间: 2012-12-9 06:55
本帖最后由 Taurus 于 2012-12-9 06:59 编辑
回复 BAT-VBS
现在有另外一个问题,我的想法是这样的:先不考虑输入的是不是第一个参数,如果输 ...
kuuoo 发表于 2012-12-1 21:47
暈哦~
你仔細讀清楚你的流程吧
"if %n%==5 goto :end" 一句排位先於處理變量為0時的處理工作 , 那當然是只要%n%是5 , 就立即直接跳到:end而不再處理變量啦- @echo off
- setlocal enabledelayedexpansion
- set n=0
- :s
- set /a n+=1
- set /p b%n%="輸入變量 :"
- if !b%n%! equ 0 set b%n%=%1
- if %n%==5 goto :end
- call :s !b%n%!
- :end
- set/p= !b1! oo !b2! oo !b3! oo !b4! oo !b5!
- <
复制代码
不喜歡用setlocal enabledelayedexpansion , 就用call set N=%%N%%代朁哦 , 自己想想法子吧ok?- @echo off
- :s
- set/a n+=1
- set/p b%n%="輸入變量 :"
- call set X=%%b%n%%%
- if %X% EQU 0 set b%n%=%1
- if %n% LSS 5 call :s %X%
- set/p=%b1% oo %b2% oo %b3% oo %b4% oo %b5%
- <
复制代码
作者: kuuoo 时间: 2012-12-9 15:39
回复 10# Taurus
真不好意思我没想到这点,说实话虽然看过教程,但是各种命令综合运用我还是不会,还好能看得懂你的代码,很清楚,谢谢你啦~之后的代码我会尽量自己想的
作者: BAT-VBS 时间: 2012-12-9 18:43
回复 11# kuuoo
多写代码就好了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |