找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 32999|回复: 12

[文本处理] 求助批处理把CSV文件按照C3单元格内容重命名文件

[复制链接]
发表于 2021-5-30 05:17:12 | 显示全部楼层 |阅读模式
大神好:
    求助批量将CSV文件按照各自的d8+C3单元格内容重新命名;
发表于 2021-5-30 07:29:22 | 显示全部楼层
未测试,效率不高,小批量、小文件应当还行。请自行测试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.csv') do (
  4.     set n=0
  5.     for /f "tokens=3,4 delims=," %%a in (%%i) do (
  6.         set /a n+=1
  7.         if !n!==3 (
  8.             set str=%%a
  9.         ) else if !n!==8 (
  10.             set str=%%b!str!
  11.         )
  12.     )
  13.     ren "%%i" "!str!.csv"
  14. )
  15. pause
复制代码
 楼主| 发表于 2021-5-31 09:57:09 | 显示全部楼层
回复 2# qixiaobin0715


   谢谢大哥哥:提取的是D列D3和G列 G13 的数据;改成tokens 2.3 提取的是C F列数据;内网不能传附件文件被加密;如果取C3 C8 C12 三个名字的组合怎么修正啊
for /f "tokens=2,3
发表于 2021-5-31 10:58:27 | 显示全部楼层
你可以复制部分文本片段来看看。
 楼主| 发表于 2021-5-31 21:08:03 | 显示全部楼层
本帖最后由 haichuan5121 于 2021-5-31 21:54 编辑

回复 4# qixiaobin0715


    大哥哥: CSV文件就直接按这个测试的;CSV格式是逗号“”,“”隔开的;
大哥哥的代码修改后可以准确取不同列的可以实现了;
取同列的不同行怎么改呢;比如C2+C6 命名文件;
A1        B1        C1        D1        E1        F1
A2        B2        C2        D2        E2        F2
A3        B3        C3        D3        E3        F3
A4        B4        C4        D4        E4        F4
A5        B5        C5        D5        E5        F5
A6        B6        C6        D6        E6        F6
A7        B7        C7        D7        E7        F7
A8        B8        C8        D8        E8        F8
A9        B9        C9        D9        E9        F9
A10        B10        C10        D10        E10        F10
A11        B11        C11        D11        E11        F11
A12        B12        C12        D12        E12        F12
A13        B13        C13        D13        E13        F13
A14        B14        C14        D14        E14        F14
A15        B15        C15        D15        E15        F15
A16        B16        C16        D16        E16        F16
A17        B17        C17        D17        E17        F17
发表于 2021-6-1 06:14:10 | 显示全部楼层
回复 5# haichuan5121
tokens后面的数字代表列数,!n!代表行数。在3楼你说有问题,所以我说的是提供一下现实中的文件片段,而不是自己随便造一个,看看到底哪里出了问题。没办法,还是你自己修改吧。
 楼主| 发表于 2021-6-1 09:28:12 | 显示全部楼层
回复 6# qixiaobin0715
各位老师大哥哥**姐原文是这个格式的CSV;
需要全部改成 第二行第三列+第四行第三列  重命名;文件好几千个;
2021/06/01 15236为名字怎么弄撒!

Start Time,,2021/06/01,05:23:49
End Time,,2021/06/01,06:03:11
C1 ID,,1c08
D2 ID,,15236
Port No.,,4

Processed Substrate,,10
Processed Substrate,,6193

Sub. No.,,501
发表于 2021-6-1 10:47:25 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2021-6-2 11:53 编辑

回复 7# haichuan5121
主要原因是第二列空白造成的,小批量运行下列代码试试,未经测试:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.csv') do (
  4.     set n=0
  5.     for /f "delims=" %%j in (%%i) do (
  6.         set "var=%%j"
  7.         set "var=!var:,,=,@,!"
  8.         for /f "tokens=3 delims=," %%a in ("!var!") do (
  9.             set /a n+=1
  10.             if !n!==2 (
  11.                 set str=%%a
  12.             ) else if !n!==4 (
  13.                 set str=!str! %%a
  14.                 set "str=!str:/=!"
  15.             )
  16.         )
  17.     )
  18.     if not exist "!str!.csv" (
  19.         ren "%%i" "!str!.csv"
  20.     ) else (
  21.         set k=1
  22.         for /l %%x in (1,1,9) do (
  23.             if !k!==1 if not exist "!str!%%x.csv" ren "%%i" "!str!%%x.csv"&set k=0
  24.         )
  25.     )
  26. )
  27. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
haichuan5121 + 1 感谢感谢;帮扶及时耐心 奈斯

查看全部评分

发表于 2021-6-1 11:18:45 | 显示全部楼层
本帖最后由 newswan 于 2021-6-1 11:25 编辑

用函数,每次得到一个值
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION


  3. call :f a.txt 1 d var
  4. echo %var%

  5. goto :END

  6. rem %1 file row colume
  7. :f
  8. set/a r=%2-1
  9. if %r%==0 (
  10.     for /f "tokens=1-11 delims=," %%a in (%1) do (
  11.         set %4=%%%3
  12.         goto :eof
  13.     )
  14. ) else (
  15.     for /f "skip=%r% tokens=1-11 delims=," %%a in (%1) do (
  16.         set %4=%%%3
  17.         goto :eof
  18.     )
  19. )
  20. goto :eof


  21. :END
复制代码

评分

参与人数 1技术 +1 收起 理由
haichuan5121 + 1 谢谢老师

查看全部评分

发表于 2021-6-1 11:31:49 | 显示全部楼层
本帖最后由 newswan 于 2021-6-1 11:40 编辑

主程序部分

  1. for /f "delims=" %%a in ('dir /b *.csv') do (
  2.     call :f "%%a" 2 c v1
  3.     call :f "%%a" 3 c v2
  4.     echo "%%a" !v1!+!v2!.csv
  5. )
复制代码
 楼主| 发表于 2021-6-2 11:12:33 | 显示全部楼层
回复 8# qixiaobin0715


    第二行字符是2021/06/01  “/”不支持命名报错;怎么把/去掉后再命名啊; set !a:/=! 不好使啊;
另外C2+C4有重名文件的话不会转换;  怎么解!
发表于 2021-6-2 11:36:05 | 显示全部楼层
回复 11# haichuan5121
去掉/,已修改。
发表于 2021-6-2 11:55:17 | 显示全部楼层
回复 11# haichuan5121
对付重名文件来个简单的,后面加1、2...9。最多能对付9个重名文件。未测试。

评分

参与人数 1技术 +1 收起 理由
haichuan5121 + 1 完美~(。≧3≦)ノ⌒☆

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 17:58 , Processed in 0.034298 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表