[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

大神好:
    求助批量将CSV文件按照各自的d8+C3单元格内容重新命名;

回复 11# haichuan5121
对付重名文件来个简单的,后面加1、2...9。最多能对付9个重名文件。未测试。
1

评分人数

TOP

回复 11# haichuan5121
去掉/,已修改。

TOP

回复 8# qixiaobin0715


    第二行字符是2021/06/01  “/”不支持命名报错;怎么把/去掉后再命名啊; set !a:/=! 不好使啊;
另外C2+C4有重名文件的话不会转换;  怎么解!

TOP

本帖最后由 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. )
复制代码

TOP

本帖最后由 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

评分人数

TOP

本帖最后由 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

评分人数

    • haichuan5121: 感谢感谢;帮扶及时耐心 奈斯技术 + 1

TOP

回复 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

TOP

回复 5# haichuan5121
tokens后面的数字代表列数,!n!代表行数。在3楼你说有问题,所以我说的是提供一下现实中的文件片段,而不是自己随便造一个,看看到底哪里出了问题。没办法,还是你自己修改吧。

TOP

本帖最后由 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

TOP

你可以复制部分文本片段来看看。

TOP

回复 2# qixiaobin0715


   谢谢大哥哥:提取的是D列D3和G列 G13 的数据;改成tokens 2.3 提取的是C F列数据;内网不能传附件文件被加密;如果取C3 C8 C12 三个名字的组合怎么修正啊
for /f "tokens=2,3

TOP

未测试,效率不高,小批量、小文件应当还行。请自行测试:
  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
复制代码

TOP

返回列表