[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
不知行否, 会生成两种类型的csv
  1. @echo off&pause&chcp 936 >nul
  2. set max=10000
  3. set m=10000
  4. cd.>______1.csv
  5. for /R %%a in ("*.lvm") do (
  6. set /a m+=1
  7. set file=%%a
  8. call :aaa
  9. echo,
  10. )>>______1.csv
  11. for /l %%a in (%max%,-1,10000) do set array%%a=,
  12. for /f "delims=" %%a in (______1.csv) do (
  13. set l=10000
  14. for %%b in (%%a) do (
  15. setlocal enabledelayedexpansion
  16. for %%c in (!l!) do (
  17. for %%d in ("!array%%c!") do endlocal&set array%%c=%%~d,%%~b
  18. )
  19. set /a l+=1
  20. )
  21. call :bbb
  22. )
  23. cd.>______2.csv
  24. (for /f "tokens=1* delims==," %%a in ('set array') do echo %%b)>>______2.csv
  25. pause&exit/b
  26. :aaa
  27. set n=10000
  28. set /p=""%file%""<nul
  29. for /f "tokens=3" %%u in ('findstr /b "[-0-9][0-9]*\." "%file%"') do (
  30. set /a n+=1
  31. set /p=,%%%u<nul
  32. )
  33. if %n% gtr %max% set max=%n%
  34. goto :eof
  35. :bbb
  36. set /a ll=max+1
  37. if %l% neq %ll% (
  38. for /l %%y in (%l%,1,%max%) do (
  39. setlocal enabledelayedexpansion
  40. for %%z in ("!array%%y!") do endlocal&set array%%y=%%~z,nil
  41. )
  42. )
复制代码
1

评分人数

    • Andalye: 乐于助人,附带注释就更好了技术 + 1

TOP

回复 9# Andalye


试试换成下面的吧,感觉之前的容易超过长度限制
bat代码文件保存为ansi或gbk编码的文件
生成的csv的编码为gbk,分割符为英文逗号,因此文件名中最好不要有英文逗号 和特殊字符
还有应该可以用excel直接打开csv文件,然后另存为xlsx格式的文件的
  1. @echo off&pause&chcp 936 >nul
  2. rem 将bat代码文件保存为gbk编码的文件
  3. rem 生成的csv的编码为gbk,分割符为英文逗号,因此文件名中最好不要有英文逗号和特殊字符
  4. rem 循环初始值
  5. set iii=10000
  6. rem 数据列最大初始值
  7. set max=10000
  8. rem 文件数量初始值
  9. set m=10000
  10. echo,
  11. rem 递归枚举当前目录下的.lvm文件并提取数据
  12. for /R %%a in ("*.lvm") do (
  13. set n=10000
  14. set file=%%a
  15. echo 开始提取文件"%%a"数据列
  16. call :aaa
  17. echo 提取完成&echo.
  18. set /a m+=1
  19. )
  20. set /a m-=1
  21. echo 开始生成csv文件...&echo,
  22. echo 创建文件 ______a.csv
  23. cd.>______a.csv
  24. for /l %%a in (%iii%,1,%m%) do (
  25. set lll=0
  26. rem 获取变量值并分割,重定向数据到csv文件
  27. for /f "tokens=1* delims==" %%b in ('set array%%a_') do (
  28. if defined lll (
  29. set /p="%%c"<nul
  30. set lll=
  31. ) else set /p=,%%c<nul
  32. )
  33. echo,
  34. )>>______a.csv
  35. echo 已生成csv文件&echo.
  36. echo 创建文件 ______b.csv
  37. cd.>______b.csv
  38. setlocal enabledelayedexpansion
  39. rem 重定向数据到csv文件,分隔符为英文逗号,不足最大数据列的用nil填充
  40. (for /l %%y in (%iii%,1,%max%) do (
  41. set lll=0
  42. for /l %%z in (%iii%,1,%m%) do (
  43. if !lll! == 0 (
  44. if "!array%%z_%%y!" neq "" (set/p=!array%%z_%%y!<nul) else set/p=nil<nul
  45. set /a lll+=1
  46. ) else (
  47. if "!array%%z_%%y!" neq "" (set/p=,!array%%z_%%y!<nul) else set/p=,nil<nul
  48. ))
  49. echo,
  50. ))>>______b.csv
  51. echo 已生成csv文件&echo.
  52. endlocal
  53. pause&exit/b
  54. rem 提取文件数据过程
  55. :aaa
  56. set "array%m%_%n%=%file%"
  57. rem 读取文件并提取数据
  58. for /f "tokens=3" %%b in ('findstr /b "[-0-9][0-9]*\." "%file%"') do (
  59. set /a n+=1
  60. setlocal enabledelayedexpansion
  61. for %%c in (!m!_!n!) do endlocal&set array%%c=%%b
  62. )
  63. rem 重设最大数据列值
  64. if %n% gtr %max% set max=%n%
  65. goto :eof
复制代码
1

评分人数

    • Andalye: 感谢给帖子标题标注[已解决]字样技术 + 1

TOP

返回列表