我的问题是无法拆分波浪号 I / p文件: 样本数据:只有5个cols,其中第2个col值为空,但使用tilde运算符进行的delim显示第2个字段值为3。
输入文件:
field 1: 1
field 2:
field 3: 3
field 4: 4
field 5: 5
我的实际输出是
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F "usebackq delims=" %%# in (F:\batch\input.txt) do (
pause
set "LINE=%%#"
echo Line is:%%#
setlocal EnableDelayedExpansion
for /F "tokens=1-5 delims=," %%A in (^""!LINE:,="^,"!"^") do (
endlocal
echo Field 1: %%~A
echo Field 2: %%~B
echo Field 3: %%~C
echo Field 4: %%~D
echo Field 5: %%~E
setlocal EnableDelayedExpansion
)
endlocal
)
pause
endlocal
我的预期输出应为
Android
我的预期输出应该是字段2输出应该是空白的。下面的代码解密了逗号。我想要为波形符号(〜)
做类似的事情这是我的代码:
5
在评论中阅读该帖后仍然无法得到确切的输出。你能告诉我吗?
答案 0 :(得分:1)
@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q46440111.txt"
FOR /f "usebackqdelims=" %%A IN ("%filename1%") DO (
SET "line=%%A"
CALL :replace~ line ":"
FOR /f "tokens=1-5delims=:" %%a IN ('call echo "%%line%%"' ) DO (
echo Field 1: %%~a
echo Field 2: %%~b
echo Field 3: %%~c
echo Field 4: %%~d
echo Field 5: %%~e
)
)
GOTO :EOF
:replace~
CALL SET "$=%%%1%%"
SET "%1="
:replace~l
IF NOT DEFINED $ GOTO :EOF
IF "%$:~0,1%"=="~" (CALL SET "%1=%%%1%%%2") ELSE (CALL SET "%1=%%%1%%%$:~0,1%")
SET "$=%$:~1%"
GOTO replace~l
您需要更改sourcedir
的设置以适合您的具体情况。
我使用了一个名为q46440111.txt
的文件,其中包含我的测试数据。
由于您似乎希望在禁用delayedexpansion
的情况下操作,因此我没有调用它。
从文件读取的行被分配给line
,并且该变量由例程replace~
处理,以使用提供给例程的第二个参数机械地替换每个~
。 p>
然后由第二个for
解析结果并报告各个元素。