我有包含79个字段的CSV文件。但我只需要14个领域。所以我需要生成一个包含这14个字段的CSV文件。这是日常流程,需要安排。 我使用以下命令创建了一个批处理文件。
FOR /f "tokens=1,7,17,18,28,29,31,34,39,61,62,66,71,73 delims=," %%B in (C:\Users\c6372\Desktop\xmltocsv\Fulldata_withheaders.csv) do @echo %%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K,%%L,%%M,%%N,%%O>> C:\Users\c6372\Desktop\xmltocsv\Requireddata_withheaders.csv
但问题是,批处理文件中的FOR循环只能工作到31个字段。但我有79个领域。我知道如果我们想要处理超过31个字段,我们应该使用嵌套for循环。我尝试过这个。但它没有用。任何人都可以帮助我。
提前致谢。
答案 0 :(得分:3)
@echo off
set "name=npocmaka"
echo before firstToUpper - %name%
call ::firstToUpper name
echo after firstToUpper - %name%
exit /b 0
:firstToUpper var
setlocal enableDelayedExpansion
set "name=!%~1!"
set first_letter=%name:~0,1%
set last_letters=%name:~1%
for %%# in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
set first_letter=!first_letter:%%#=%%#!
)
set "name=%first_letter%%last_letters%"
endlocal && (
set "%~1=%name%"
)
exit /b %errorlevel%
您需要更改@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q35592993.txt"
SET "filename2=%destdir%\q35592993out.txt"
FOR /f "usebackq tokens=1,7,17,18,28,29,* delims=," %%B in ("%filename1%") do (
for /f "tokens=2,5,10,29,* delims=," %%I in ("%%H") do (
for /f "tokens=3,4,8,13,15 delims=," %%N in ("%%M") do (
echo %%B,%%C,%%D,%%E,%%F,%%G,%%I,%%J,%%K,%%N,%%O,%%P,%%Q,%%R>> "%filename2%"
)
)
)
GOTO :EOF
destdir sourcedir,
filename1 ,
filename2`的设置以适合您的具体情况。我使用了适合我系统的名字。
我使用了一个名为and
的文件,其中包含一些虚拟数据供我测试。
诀窍是使用令牌q35592993.txt
,这意味着'在最后一个明确提到的令牌之后的其余部分。