如何将多个CSV文件拆分为两个标题行-有行限制
我需要批量申请如何将多个CSV文件拆分为两个标题行-有行限制,csv,batch-file,Csv,Batch File,我需要批量申请 主要目标:将.csv文件拆分为单独的文件。有行限制 源文件夹包含许多.CSV文件 每个主文件有2个标题行。并且分割的文件应具有相同的2个标题行 代码中必须有一个参数来设置分割文件中的行限制 源文件夹(包含1个或多个.csv文件)的代码中必须有一个参数 目标文件夹的代码中必须有一个参数(要包含拆分文件) 每个拆分文件的名称与源文件相同,源文件在所有拆分文件中添加了“编号”(例如:源文件ABC.CSV,共3行。行限制=2。traget文件:ABC_1_of_2.CSV,ABC 2_o
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set _FILE="C:\Users\USER\Desktop\Split\MAINFILE.CSV" & rem // (first command line argument is input file)
set /A "_LIMIT=100" & rem // (number of records or rows per output file)
rem // Split file name:
set NAME=c:\users\USER\Desktop\Split\Splitted\MAINFILE & rem // (path and file name)
set EXT=.csv & rem // (file name extension)
rem // Determine number of lines excluding header:
for /F %%I in ('^< "%_FILE%" find /V /C ""') do set /A "COUNT=%%I-1"
rem // Split file into multiple ones:
setlocal EnableDelayedExpansion
rem // Read file once:
< "!_FILE!" (
rem // Read header (first line):
set /P HEADER1=""
set /P HEADER2=""
rem // Calculate number of output files:
set /A "DIV=(COUNT-1)/_LIMIT+3"
rem // Iterate over output files:
for /L %%J in (1,1,!DIV!) do (
rem // Write an output file:
> "!NAME!_%%J_of_!DIV!!EXT!" (
rem // Write header:
echo/!HEADER1!
echo/!HEADER2!
rem // Write as many lines as specified:
for /L %%I in (1,1,%_LIMIT%) do (
set "LINE=" & set /P LINE=""
if defined LINE echo/!LINE!
)
)
)
)
endlocal
endlocal
exit /B
@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
set\u FILE=“C:\Users\USER\Desktop\Split\MAINFILE.CSV”&rem/(第一个命令行参数是输入文件)
设置/A“_LIMIT=100”&rem//(每个输出文件的记录或行数)
rem//拆分文件名:
set NAME=c:\users\USER\Desktop\Split\Splitted\MAINFILE&rem/(路径和文件名)
set EXT=.csv&rem//(文件扩展名)
rem//确定不包括标题的行数:
对于/F%%I in(“^<“%\u文件%”查找/V/C”“”),请设置/A“计数=%%I-1”
rem//将文件拆分为多个文件:
setlocal EnableDelayedExpansion
rem//读取文件一次:
<“!\u文件!”(
rem//读取标题(第一行):
设置/P标题1=“”
设置/P标题2=“”
rem//计算输出文件的数量:
设置/A“DIV=(计数-1)/_限制+3”
rem//迭代输出文件:
对于/L%%J in(1,1,!DIV!)do(
rem//写入输出文件:
>“!NAME!\uu%%J\u of!DIV!!分机!”(
rem//写入头:
回声/!头1!
回声/!头2!
rem//按指定的行数写入:
对于/L%%I in(1,1,%\u限制%)do(
设置“行=“&set/P行=“”
如果定义了LINE echo/!LINE!
)
)
)
)
端部
端部
退出/B
但当我试图移动文件夹中的所有文件时,我被卡住了,代码不起作用
setlocal EnableExtensions DisableDelayedExpansion
Set /A "Location=C:\USER\"
For /R "C:\USER\Source\" %%f in (*.csv) do (
rem // Define constants here:
set _FILE=%%f & rem // (first command line argument is input file)
set /A "_LIMIT=20" & rem // (number of records or rows per output file)
rem // Split file name:
set "NAME=C:\USER\Splitted\%%~nf" & rem // (path and file name)
set EXT=.csv & rem // (file name extension)
timeout /t 3 /nobreak
rem // Determine number of lines excluding header:
for /F %%I in ('^< "%_FILE%" find /V /C ""') do set /A "COUNT=%%I-2"
rem // Split file into multiple ones:
setlocal EnableDelayedExpansion
rem // Read file once:
< "!_FILE!" (
rem // Read header (first line):
set /P HEADER1=""
set /P HEADER2=""
rem // Calculate number of output files:
set /A "_DIV=(COUNT-1)/_LIMIT+1"
Echo !_DIV!
rem // Iterate over output files:
for /L %%J in (1,1,!DIV!) do (
rem // Write an output file:
> "!NAME!_%%J_of_!_DIV!!EXT!" (
rem // Write header:
echo/!HEADER1!
echo/!HEADER2!
rem // Write as many lines as specified:
for /L %%I in (1,1,%_LIMIT%) do (
set "LINE=" & set /P LINE=""
if defined LINE echo/!LINE!
)
)
)
)
endlocal
)
endlocal
exit /B
setlocal EnableExtensions DisableDelayedExpansion
设置/A“位置=C:\USER\”
对于(*.csv)中的/R“C:\USER\Source\”%%f,请执行以下操作(
rem//在此处定义常量:
set _FILE=%%f&rem//(第一个命令行参数是输入文件)
设置/A“_LIMIT=20”&rem//(每个输出文件的记录或行数)
rem//拆分文件名:
设置“NAME=C:\USER\Splitted\%%~nf”&rem/(路径和文件名)
set EXT=.csv&rem//(文件扩展名)
超时/t 3/nobreak
rem//确定不包括标题的行数:
对于/F%%I in(“^<“%\u文件%”查找/V/C”“”),请设置/A“计数=%%I-2”
rem//将文件拆分为多个文件:
setlocal EnableDelayedExpansion
rem//读取文件一次:
<“!\u文件!”(
rem//读取标题(第一行):
设置/P标题1=“”
设置/P标题2=“”
rem//计算输出文件的数量:
设置/A“\u DIV=(计数-1)/\u限制+1”
回声!
rem//迭代输出文件:
对于/L%%J in(1,1,!DIV!)do(
rem//写入输出文件:
>“!NAME!\uu%%J\u of\uu!\u DIV!!分机!”(
rem//写入头:
回声/!头1!
回声/!头2!
rem//按指定的行数写入:
对于/L%%I in(1,1,%\u限制%)do(
设置“行=“&set/P行=“”
如果定义了LINE echo/!LINE!
)
)
)
)
端部
)
端部
退出/B
请帮忙
当前状态-仅创建了一个空文件-仅标题行。
文件名为-Book2\u 1\u of_1.csv
请参阅输出附件中的运行时
谢谢在批处理文件中,例如,我们需要在
%
上加倍<对于/f%f的代码>应该是对于/f%%f
和设置文件=%f
应该是设置文件=%f”
谢谢!我改了。仍然不起作用虽然不起作用有点模糊。什么不起作用,发生了什么或没有发生什么?你调试过什么吗?首先删除@echo off
以查看屏幕的输出。我尝试了调试,但无法在内部暂停以进行循环。就像当我添加外部for循环时,它停止了工作。所以我使用了timeout/t10/nobreak,但它在内部for中工作。外部的原因是腐败。有一件事可以肯定的是,你应该与你的delayedexpansion变量保持一致<代码>%\u文件%应该是_文件代码>然后进行调试。删除@echo off,然后打开cmd并从那里运行脚本,而不是双击。