Tilde分隔符输入文件,但它具有需要保留的空值

时间:2017-09-27 05:28:35

标签: string windows batch-file cmd split

我的问题是无法拆分波浪号 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

在评论中阅读该帖后仍然无法得到确切的输出。你能告诉我吗?

1 个答案:

答案 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解析结果并报告各个元素。