批量拆分字符串到单个变量

时间:2017-04-07 18:11:58

标签: batch-file variables cmd split

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时,我不断收到错误“命令的语法不正确”。现在我想得到:拆分将我的4位“商店号码”存储到变量中。因此,如果我的商店编号是9876,我希望n1 = 9 n2 = 8 n3 = 7 n4 = 6作为变量。问题是我的代码错误了。

1 个答案:

答案 0 :(得分: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

...实际上,您可以避免delayedexpansion使用

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

如果使用delayedexpansion,则需要endlocal...才能在n4括号之外提供setlocal/endlocal的值。

代码的主要部分是不言而喻的。您没有设置result,因此 echo echo解析为echo-status,因此会提供echo报告。我已更改第二个@RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc public class TestDummyRest extends BaseRestTestCase{ @Autowired private MockMvc mockMvc; @MockBean private IDummyServices mockDummyServices; @Test public void getSendGoodMessage() throws Exception { given(mockDummyServices.sendGoodMessage(Mockito.anyString())).willReturn(true); mockMvc.perform(get("/dummy")) .andExpect(status().isOk()) .andExpect(content().contentType(TEXT_PLAIN_CONTENT_TYPE)); verify(mockDummyServices, times(1)).sendGoodMessage(Mockito.anyString()); } } 以提供所有相关变量的列表。

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