Windows批处理文件从定界符之间没有数据的文件读取

德鲁夫·马利克(Dhruv Malik)

我有一个如下所示的多行CSV:

A/B//D
E//G/H

我正在尝试使用这些a,b,c(在这种情况下为空白)和d作为参数输入。我今天使用的代码是跳过C并将D分配到第三位置。

FOR /F " tokens=1,2,3,4 delims=/" %%i IN (MYCSV.txt"') DO tabcmd get "MyView.png?Filter1=%%A&Filter2=%%B&Filter3=%%C&Filter4=%%D" -f "Outputfile.png"

预期输出:

Mview.png?Filter1 = A&Filter2 = B&Filter3 =&Filter4 = D

我得到的是:Mview.png?Filter1 = A&Filter2 = B&Filter3 = D&Filter4 =

任何帮助将不胜感激。谢谢。

阿希普

for /F将相邻的定界符合并为一个以解析文本。但是,您可以阅读整行,临时插入一个非定界符以拆分为标记,然后稍后将其删除,如下所示:

rem // Read whole lines:
for /F "usebackq delims=" %%A in ("MyCSV.txt") do (
    rem // Store current line:
    set "LINE=%%A"
    rem // Toggle delayed expansion to avoid trouble with `!`:
    setlocal EnableDelayedExpansion
    rem /* Prepend `_` to line string and replace every `/` by `/_`, hence every `/`-delimited
    rem    item becomes preceded by `_`, hence no more adjacent delimiters `/` can occur: */
    for /F "tokens=1-4 delims=/" %%a in ("_!LINE:/=/_!") do (
        endlocal
        rem // Get items preceded with `_`:
        set "ITEM1=%%a"
        set "ITEM2=%%b"
        set "ITEM3=%%c"
        set "ITEM4=%%d"
        setlocal EnableDelayedExpansion
        rem // Return rebuild line string with delimiters `,` and preceding `_` removed:
        echo(!ITEM1:~1!,!ITEM2:~1!,!ITEM3:~1!,!ITEM4:~1!
    )
    endlocal
)

当然,仅需替换定界符,您只需执行以下操作:

rem // Read whole lines:
for /F "usebackq delims=" %%A in ("MyCSV.txt") do (
    rem // Store current line:
    set "LINE=%%A"
    rem // Toggle delayed expansion to avoid trouble with `!`:
    setlocal EnableDelayedExpansion
    rem // Return new line string with delimiters replaced:
    echo(!ITEM:/=,!
    endlocal
)

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados