标题: [文本处理] 求助批处理把CSV文件按照C3单元格内容重命名文件 [打印本页]
作者: haichuan5121 时间: 2021-5-30 05:17 标题: 求助批处理把CSV文件按照C3单元格内容重命名文件
大神好:
求助批量将CSV文件按照各自的d8+C3单元格内容重新命名;
作者: qixiaobin0715 时间: 2021-5-30 07:29
未测试,效率不高,小批量、小文件应当还行。请自行测试:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d *.csv') do (
- set n=0
- for /f "tokens=3,4 delims=," %%a in (%%i) do (
- set /a n+=1
- if !n!==3 (
- set str=%%a
- ) else if !n!==8 (
- set str=%%b!str!
- )
- )
- ren "%%i" "!str!.csv"
- )
- pause
复制代码
作者: haichuan5121 时间: 2021-5-31 09:57
回复 2# qixiaobin0715
谢谢大哥哥:提取的是D列D3和G列 G13 的数据;改成tokens 2.3 提取的是C F列数据;内网不能传附件文件被加密;如果取C3 C8 C12 三个名字的组合怎么修正啊
for /f "tokens=2,3
作者: qixiaobin0715 时间: 2021-5-31 10:58
你可以复制部分文本片段来看看。
作者: haichuan5121 时间: 2021-5-31 21:08
本帖最后由 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
作者: qixiaobin0715 时间: 2021-6-1 06:14
回复 5# haichuan5121
tokens后面的数字代表列数,!n!代表行数。在3楼你说有问题,所以我说的是提供一下现实中的文件片段,而不是自己随便造一个,看看到底哪里出了问题。没办法,还是你自己修改吧。
作者: haichuan5121 时间: 2021-6-1 09:28
回复 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
作者: qixiaobin0715 时间: 2021-6-1 10:47
本帖最后由 qixiaobin0715 于 2021-6-2 11:53 编辑
回复 7# haichuan5121
主要原因是第二列空白造成的,小批量运行下列代码试试,未经测试:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d *.csv') do (
- set n=0
- for /f "delims=" %%j in (%%i) do (
- set "var=%%j"
- set "var=!var:,,=,@,!"
- for /f "tokens=3 delims=," %%a in ("!var!") do (
- set /a n+=1
- if !n!==2 (
- set str=%%a
- ) else if !n!==4 (
- set str=!str! %%a
- set "str=!str:/=!"
- )
- )
- )
- if not exist "!str!.csv" (
- ren "%%i" "!str!.csv"
- ) else (
- set k=1
- for /l %%x in (1,1,9) do (
- if !k!==1 if not exist "!str!%%x.csv" ren "%%i" "!str!%%x.csv"&set k=0
- )
- )
- )
- pause
复制代码
作者: newswan 时间: 2021-6-1 11:18
本帖最后由 newswan 于 2021-6-1 11:25 编辑
用函数,每次得到一个值- @echo off
- setlocal ENABLEDELAYEDEXPANSION
-
-
- call :f a.txt 1 d var
- echo %var%
-
- goto :END
-
- rem %1 file row colume
- :f
- set/a r=%2-1
- if %r%==0 (
- for /f "tokens=1-11 delims=," %%a in (%1) do (
- set %4=%%%3
- goto :eof
- )
- ) else (
- for /f "skip=%r% tokens=1-11 delims=," %%a in (%1) do (
- set %4=%%%3
- goto :eof
- )
- )
- goto :eof
-
-
- :END
复制代码
作者: newswan 时间: 2021-6-1 11:31
本帖最后由 newswan 于 2021-6-1 11:40 编辑
主程序部分- for /f "delims=" %%a in ('dir /b *.csv') do (
- call :f "%%a" 2 c v1
- call :f "%%a" 3 c v2
- echo "%%a" !v1!+!v2!.csv
- )
复制代码
作者: haichuan5121 时间: 2021-6-2 11:12
回复 8# qixiaobin0715
第二行字符是2021/06/01 “/”不支持命名报错;怎么把/去掉后再命名啊; set !a:/=! 不好使啊;
另外C2+C4有重名文件的话不会转换; 怎么解!
作者: qixiaobin0715 时间: 2021-6-2 11:36
回复 11# haichuan5121
去掉/,已修改。
作者: qixiaobin0715 时间: 2021-6-2 11:55
回复 11# haichuan5121
对付重名文件来个简单的,后面加1、2...9。最多能对付9个重名文件。未测试。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |