2017-04-07 55 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

謝謝!這幫助我很多。對於基本的理解抱歉。這有助於我尚未得到的腳​​本的其他部分。 –