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作为变量。问题是我的代码错误了。
答案 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或仅为数字。