让我描述一下我的问题。
我有一个从Excel导出的包含大量数据的CSV文件。
第一行有一个标题,第二行有列标题。
我需要仅提取该文件中的两列(第2列和第3列),将它们放到1列中,并将输出发送到另一个文件。
示例:
事实上,当csv解析器遇到包含-()@字符的字符串行时会出现失败。(我认为循环将它们视为分隔符,所以每次都会给我一个超出范围的错误)。
这是我目前已经拥有的内容。
我希望你能看一下这个,帮我把两列合并到一个文件中并输出结果。非常感谢。
示例:
Title
colA , colB , colC , colD ,...
abc , def , ghi , jkl ,...
abc , def , ghi , jkl ,...
abc , def , ghi , jkl ,...
abc , def , ghi , jkl ,...
事实上,当csv解析器遇到包含-()@字符的字符串行时会出现失败。(我认为循环将它们视为分隔符,所以每次都会给我一个超出范围的错误)。
这是我目前已经拥有的内容。
@Echo off & setlocal EnableExtensions
setLocal EnableDelayedExpansion
REM creating and clearing files
copy /y NUL C:\list1.csv >NUL
copy /y NUL C:\list1_tmp.csv >NUL
copy /y NUL C:\exportedColumns.csv >NUL
copy /y NUL C:\Result.txt >NUL
set Result=C:\Result.txt
set Source=C:\sourcelist.csv
set list1=C:\list1.csv
set list1_tmp=C:\list1_tmp.csv
set expCol=C:\exportedColumns.csv
REM skip 1st two lines from source file and put to output file list1
for /f "skip=2 delims=*" %%a in (%Source%) do (echo %%a >>%list1%)
REM shorten each line to 500 chars and put it to new file
for /f "tokens=* delims=" %%a in ("%list1%") do (
set s=%%a
set s=%s:~0,500%
echo.%s% >> "%list1_tmp%"
)
REM ^^^^^^^^^^^ this is not working. It puts only 1 space to the output file
rem Parsing the csv file
rem Process the file:
call :ProcessFile < %list1_tmp%
exit /B
:ProcessFile
set /P line=
:nextLine
set line=:EOF
set /P line=
if "!line!" == ":EOF" goto :EOF
set i=0
for %%e in (%line%) do (
set /A i+=1
for %%i in (!i!) do (
if %%i==1 echo %%~e >> %expCol%
if %%i==2 echo %%~e >> %expCol%
)
if %%i==3 goto nextLine
REM I don't want it to process all the columns
)
goto nextLine
我希望你能看一下这个,帮我把两列合并到一个文件中并输出结果。非常感谢。
>>"%list1_tmp%" echo.!s!
有助于延迟%s%
的扩展吗?(我只是重新排列了命令重定向,以防止将尾随空格回显到%list1_tmp%
中,但这不是重点。) - rojo