如何读取变量中的每个字符

时间:2015-09-22 01:53:14

标签: batch-file

我正在尝试创建一个程序,允许用户输入一串数字,然后按照用户输入的顺序备份与所述数字对应的目录。 (我意识到我可以用更简单的方式做到这一点,但我这样做是一种学习经验类型的事情。)

到目前为止,我的方法是让if命令检查最多5位数的1-5的每种可能组合。它首先进入序列中的第一个数字,然后进入第二个数字,依此类推,直到它达到输入数字的数量,此时它就会退出。

例如:如果我想要号码324。

@echo off
echo What do you want to back up?
set /P a=""
:OptionSet1
set b=a
*all other numbers*
if /I "%a%" equ "324" goto 3
:OptionSet2
set b=b
*all other numbers*
if /I "%a%" equ "324" goto 2
:OptionSet3
set b=c
*all other numbers*
if /I "%a%" equ "324" goto 4
:Exit
exit
:2
echo Now I'm running 2
if /I "%b%" equ "a" goto OptionSet2
if /I "%b%" equ "b" goto OptionSet3
if /I "%b%" equ "e" goto Exit
:3
echo Now I'm running 3
if /I "%b%" equ "a" goto OptionSet2
if /I "%b%" equ "b" goto OptionSet3
if /I "%b%" equ "e" goto Exit
:4
echo Now I'm running 4
if /I "%b%" equ "a" goto OptionSet2
if /I "%b%" equ "b" goto OptionSet3
if /I "%b%" equ "e" goto Exit

所以我想知道:有没有办法接受用户输入,并读取他们逐个字母输入的内容,然后根据字母的内容进行操作?

例如,假设我输入了数字52421.我想读取第一个数字是什么,执行goto命令并运行goto中的任何内容,然后我希望它返回读取第二个数字,依此类推,直到它到达输入字符串的末尾。

任何帮助都会非常感激,但请记住,我对此非常陌生,所以请详细解释发生了什么。

2 个答案:

答案 0 :(得分:0)

中间字符串 - 按位置提取子字符串

描述:类似于VB中的Mid函数,批处理脚本可以从字符串内的任何位置返回指定数量的字符,方法是在扩展变量内容时使用:〜指定位置和长度的扩展的子字符串。此处的示例显示了如何提取日期的各个部分。

脚本:

echo.Date   : %date%
echo.Weekday: %date:~0,3%
echo.Month  : %date:~4,2%
echo.Day    : %date:~7,2%
echo.Year   : %date:~10,4%

输出:

Date   : Sat 03/11/2006
Weekday: Sat
Month  : 03
Day    : 11
Year   : 2006

取自http://www.dostips.com/DtTipsStringManipulation.php#Snippets.MidString

答案 1 :(得分:0)

你也可以使用空格作为"数字分隔符"并将整个字符串传递给另一个批处理文件(或者,在本例中,它本身,允许它使用递归):

@echo off
set argstring=%*
if "%argstring%" EQU "" goto :EOF

set thisarg=%1
REM do stuff with thisarg here
echo.thisarg


set argstring=%argstring:* =%
call thisfile.bat argstring
goto :EOF

使用call thisfile.bat 3 4 5 1 9从命令行启动此文件,它将回显

3
4
5
1
9

(递归非常好)

希望这有帮助