Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop delim为';时,批处理脚本跳过.CSV中的空白条目';_For Loop_Batch File_Batch Processing - Fatal编程技术网

For loop delim为';时,批处理脚本跳过.CSV中的空白条目';

For loop delim为';时,批处理脚本跳过.CSV中的空白条目';,for-loop,batch-file,batch-processing,For Loop,Batch File,Batch Processing,我有一个.CSV文件,我正试图通过它来从数据中创建另一个文件,但当我运行它时,它会跳过空白条目。例如,如果一条线是 value,value,value,,,value 我试着得到第四栏,它会吐出第六栏。大概是因为它是下一个有效值。我不希望它跳过空白条目,因为它会弄乱我要做的表格。有人知道如何解决这个问题吗?(欢迎提供任何提示,因为我不擅长批处理脚本) 这是我的剧本: FOR /F "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14 delims=," %%a in

我有一个.CSV文件,我正试图通过它来从数据中创建另一个文件,但当我运行它时,它会跳过空白条目。例如,如果一条线是
value,value,value,,,value
我试着得到第四栏,它会吐出第六栏。大概是因为它是下一个有效值。我不希望它跳过空白条目,因为它会弄乱我要做的表格。有人知道如何解决这个问题吗?(欢迎提供任何提示,因为我不擅长批处理脚本)

这是我的剧本:

FOR /F "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14 delims=," %%a in (file.csv) DO (
    echo %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n
)
pause

这是FOR/F循环的标准行为,连续的delims仅用作一个分隔符。
但您可以使用一种解决方案,其中第二个用于/F.
在每一列前面加上另一个字符,在delim处拆分行并删除前缀

setlocal EnableDelayedExpansion
FOR /F "delims=" %%L in (test.bat) DO (
    set "line=%%L,,,,,,,,"
    set "line=#!line:,=,#!"
    FOR /F "tokens=1,2,3,4 delims=," %%a in ("!line!") DO (
        set "param1=%%a"
        set "param2=%%b"
        set "param3=%%c"
        set "param4=%%d"
        set "param1=!param1:~1!"
        set "param2=!param2:~1!"
        set "param3=!param3:~1!"
        set "param4=!param4:~1!"
        echo !param1! !param2! !param3! !param4!
    )
)
如中所述,
for/F
将连续分隔符视为一个分隔符。为了避免这种情况,您可以将每个分隔符
替换为
,“
,并用
括起每一行,这样每个字段都显示为被
括起,最后可以通过
for/F
变量的
~
修饰符轻松删除;因此,以后无需再进行任何字符串操作(如子字符串扩展):

@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
对于/F“usebackq delims=“%%#in”(“file.csv”)do(
设置“行=%%#”
setlocal EnableDelayedExpansion
对于/F“tokens=1-4 delims=,”%%A in(^“”!LINE:,=“^,”!“^”)do(
端部
回显字段1:%%~A
回波字段2:%%~B
回波字段3:%%~C
回波字段4:%%~D
setlocal EnableDelayedExpansion
)
端部
)
端部
如果数据本身包含
字符,这可能无法正常工作(请记住,如果原始CSV文件中的
字段包含在
中,则不会将其视为分隔符)

延迟扩展的切换是为了不丢失数据中的任何感叹号