我為這個簡單的任務瘋狂了 2 天:遍歷一個帶有分隔符的 5 行字串(或具有相同內容的檔案)。在我找到一個分隔符后,我希望將該行寫入檔案,然后為 cr/lf 表示添加 echo 并為下一段字串進行下一次迭代。
出于學術目的,我重新創建了這樣的代碼:
@echo off
setlocal EnableDelayedExpansion
set "LF=&echo."
set "dlm= "
set "s1=A A A"
set "s2=B B B"
set "s3=C C C"
set "s4=D D D"
set "s5=E E E"
set "s=%s1%%dlm%%s2%%dlm%%s3%%dlm%%s4%%dlm%%s5%%dlm%"
for /f "tokens=* delims= " %%i in ("%s%") do (
echo %%i>>test.txt
echo. >>test.txt
)
pause
輸出如下:
A A A B B B C C C D D D E E E
newline
當我想要這個
A A A
B B B
C C C
D D D
E E E
當我將令牌更改為 1 或 2 時,它會回傳正確的行
如何獲取這些子字串并將它們寫入檔案?為什么令牌不起作用?
我試圖將其放入另一個回圈并將令牌編號作為!j!傳遞,但它不起作用。我也想到了一些 goto,但認為這是一個不好的做法。
uj5u.com熱心網友回復:
split_supplied_line以下批處理代碼片段中的子例程應該可以處理(幾乎)任意數量的子字串和(幾乎)任何分隔符。無論是否有尾隨分隔符。
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
set "LF=&echo."
set "dlm= "
set "s1=A A A"
set "s2=B B B"
set "s3=C C C"
set "s4=D D D"
set "s5=E E E"
set "s=%s1%%dlm%%s2%%dlm%%s3%%dlm%%s4%%dlm%%s5%%dlm%"
rem set "s=%s1%%dlm%%s2%%dlm%%s3%%dlm%%s4%%dlm%%s5%" without trailing %dlm%
call :split_supplied_line "%s%" "%dlm%" "72351984test.txt"
goto :eof
:split_supplied_line
set "restofline=%~1" 1st parameter: line to split
set "delims=%~2" 2nd parameter: delimiter character
set "tofile=%~3" 3rd parameter: file where to write
:in_split_supplied_line
call set "noplusline=%restofline:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/480830.html
上一篇:以遞回方式查找所有可能的路徑
