我每次都试图读取具有不同文件结构的 csv 文件。我想创建一个批处理脚本来仅根据列名(而不是列位置,因为它每次都发生变化)获取特定列,并仅使用这些特定列创建一个新的分隔文件。例如,我们有以下 csv 文件数据:
Subject,ID,Error
S1,a_11,error1
S2,b_11,error2
ID 列可以出现在文件中的任何位置,但 Error 始终是最后一列。欢迎任何建议。我对批处理脚本的了解也很少。非常感谢您的帮助。提前致谢!
你的问题很不完整。缺少几个细节,所以我必须猜测它们才能编写一个有效的批处理文件:
@echo off
setlocal EnableDelayedExpansion
if "%~1" equ "" echo Usage: %0 column names ... & goto :EOF
rem Read the header and extract column names
set /P "header=" < test.csv
set "n=0"
for %%a in (%header%) do (
set /A "n+=1, column[%%~a]=n"
)
rem Assemble output line from column names given in parameters
set "output="
:nextCol
if not defined column[%~1] echo Not such column: "%~1" & goto :EOF
set "output=!output!,%%!column[%~1]!"
shift
if "%~1" neq "" goto nextCol
rem Generate output
for /F "tokens=1-%n% delims=," %%1 in (test.csv) do echo %output:~1%
这些是缺失的细节:
这些点可以在后验版本中更改...
输出示例(假设批处理文件名为 ExtractColumns.bat):
C:\Users\Antonio\Tests> ExtractColumns.bat Id,Subject
ID,Subject
a_11,S1
b_11,S2
无论如何,你的“问题”只是一个代码请求,所以如果你想获得进一步的支持,你应该表现出你的努力,并在发布的代码上发布关于特定疑问的问题......
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句