回复 9# Andalye
试试换成下面的吧,感觉之前的容易超过长度限制
bat代码文件保存为ansi或gbk编码的文件
生成的csv的编码为gbk,分割符为英文逗号,因此文件名中最好不要有英文逗号 和特殊字符
还有应该可以用excel直接打开csv文件,然后另存为xlsx格式的文件的- @echo off&pause&chcp 936 >nul
-
- rem 将bat代码文件保存为gbk编码的文件
- rem 生成的csv的编码为gbk,分割符为英文逗号,因此文件名中最好不要有英文逗号和特殊字符
-
- rem 循环初始值
- set iii=10000
-
- rem 数据列最大初始值
- set max=10000
-
- rem 文件数量初始值
- set m=10000
-
- echo,
- rem 递归枚举当前目录下的.lvm文件并提取数据
- for /R %%a in ("*.lvm") do (
- set n=10000
- set file=%%a
- echo 开始提取文件"%%a"数据列
- call :aaa
- echo 提取完成&echo.
- set /a m+=1
- )
-
- set /a m-=1
- echo 开始生成csv文件...&echo,
-
- echo 创建文件 ______a.csv
- cd.>______a.csv
- for /l %%a in (%iii%,1,%m%) do (
- set lll=0
- rem 获取变量值并分割,重定向数据到csv文件
- for /f "tokens=1* delims==" %%b in ('set array%%a_') do (
- if defined lll (
- set /p="%%c"<nul
- set lll=
- ) else set /p=,%%c<nul
- )
- echo,
- )>>______a.csv
- echo 已生成csv文件&echo.
-
- echo 创建文件 ______b.csv
- cd.>______b.csv
- setlocal enabledelayedexpansion
- rem 重定向数据到csv文件,分隔符为英文逗号,不足最大数据列的用nil填充
- (for /l %%y in (%iii%,1,%max%) do (
- set lll=0
- for /l %%z in (%iii%,1,%m%) do (
- if !lll! == 0 (
- if "!array%%z_%%y!" neq "" (set/p=!array%%z_%%y!<nul) else set/p=nil<nul
- set /a lll+=1
- ) else (
- if "!array%%z_%%y!" neq "" (set/p=,!array%%z_%%y!<nul) else set/p=,nil<nul
- ))
- echo,
- ))>>______b.csv
- echo 已生成csv文件&echo.
- endlocal
-
- pause&exit/b
-
- rem 提取文件数据过程
- :aaa
-
- set "array%m%_%n%=%file%"
-
- rem 读取文件并提取数据
- for /f "tokens=3" %%b in ('findstr /b "[-0-9][0-9]*\." "%file%"') do (
- set /a n+=1
- setlocal enabledelayedexpansion
- for %%c in (!m!_!n!) do endlocal&set array%%c=%%b
- )
-
- rem 重设最大数据列值
- if %n% gtr %max% set max=%n%
- goto :eof
复制代码
|