2017-04-07 56 views
0

Windows Batch: Split String to individual characters to variables批量拆分字符串到各个变量

试图做到这一点,但在它自己的功能。

我有一个4位数字,我试图分裂成不同的变量,但如果有办法做到这一点,以便它可以为不知道他们使用多少变量的人工作,我宁愿。以下是我的代码。

REM @echo off 
setlocal 
:start 
set /p nStore="Enter 4 digit store number:" 
call :split nStore n1 n2 n3 n4 
:pass2 
echo %result% 
echo %n1% 
goto :eof 

:split <nStore> <n1> <n2> <n3> <n4> 
(
    setlocal EnableDelayedExpansion 
    set "tmpStore=!%~1!" 
    set "count=0" 
    :loop 
    if defined tmpStore 
    (
     set tmpStore=%tmpStore:~1% 
     set /a count+=1 
     set /a pos=%count%-1 
     set n!count!=!str:~%pos%,1! 
     goto loop 
    ) 
    endlocal 
    goto :pass2 
) 

当我调用:split时,我一直收到错误“命令的语法不正确”。现在我试图得到:split将我的4位数字“商店编号”存储到变量中。所以如果我的商店号码是9876,我预计n1 = 9 n2 = 8 n3 = 7 n4 = 6作为变量。问题是我的代码有什么问题,它错误了。

+0

这是无稽之谈的代码,goto无法传递参数使用调用。 – LotPings

+0

Bah!对于那个很抱歉。现在应该修复 –

+2

这是什么问题? – LotPings

回答

0
@ECHO OFF 
SETLOCAL 
REM @echo off 
setlocal 
:start 
set /p nStore="Enter 4 digit store number:" 
call :split nStore n1 n2 n3 n4 
:pass2 
echo %result% 
echo %nstore% %n1% %n2% %n3% %n4% 
goto :eof 

:split <nStore> <n1> <n2> <n3> <n4> 
setlocal EnableDelayedExpansion 
set "n4=!%~1!" 
endlocal&SET "n4=%n4%" 
SET "n1=%n4:~0,1%" 
SET "n2=%n4:~1,1%" 
SET "n3=%n4:~2,1%" 
SET "n4=%n4:~3,1%" 
GOTO :EOF 

您不需要将目标参数名称发送到子过程。您可以发送%nstore%而不是nstore避免需要调用delayed expansion

...其实,你可以使用

for /f "tokens=1,2delims==" %%a in (`set %1`) do if /i "%%a"=="%1" set "n4=%%b" 

如果使用delayedexpansion避免delayedexpansion,你需要的endlocal...做出的n4值可在setlocal/endlocal支架之外获得。

代码的其余部分是不言而喻的。您没有设置result,所以echo将解析为echo,因此提供echo-status报告。我已经更改了第二个echo以提供所有有问题的变量的列表。

当然,没有检查,输入数据是长度为4或唯一的数字。

+0

我删除了由于使用最少的代码来解释问题的Lotpings Comment的检查。意外地把结果留在那里。我在我目前的脚本中有它,它的工作原理。这工作!谢谢。为什么GOTO:EOF能够工作而不是返回类似于:pass2? –

+0

'call'语句将执行转移到目标标签,然后继续处理,直到您到达文件结尾或'exit'语句,此时它将返回到'call'后面的语句。我习惯性地添加'goto:eof',即使它是多余的,以便我不需要记住在我可以添加到代码中的任何新子程序之前插入它。 'exit'有多种口味。 ''exit''可以终止'cmd'会话。'exit/b n',其中'n'是可选的,数字将'errorlevel'设置为'n'并终止一个子程序。 – Magoo

+0

谢谢!这帮助我很多。对于基本的理解抱歉。这有助于我尚未得到的脚​​本的其他部分。 –