批处理命令 - 读取csv文件并使用多个标识的内容创建文件名

时间:2017-06-08 20:41:29

标签: batch-file batch-processing batch-rename

我有多个文件,每个文件都有相同的文件名

示例:

  • Test.csv
  • 测试(1).csv
  • 测试(2).csv
  • 测试(3).csv

但每个文件中的内容都不同。

在令牌点2和4内的文件的第1行和第2行,我能够识别文件。我想用这两个数据点重命名文件。

实施例

在Test.csv文件中,行记录1和2

  • H,投影,成本
  • 1,食品,苹果,水果,55

在Test(1).csv行记录1和2

  • H,实际,成本
  • 1,食品,苹果,水果,45

在Test(2).csv行记录1和2

  • H,投影,成本
  • 1,租车,本田,自动,5500

在Test(3).csv行记录1和2

  • H,实际,成本
  • 1,Car,Honda,Auto,6500

我想将以下文件重命名为

  • Test.csv = Fruit_Projected.csv
  • 测试(1).csv = Fruit_Actual.csv
  • 测试(2).csv = Auto_Projected.csv
  • 测试(3).csv = Auto_Acutal.csv

现在我可以使用第2行和第4个令牌上的数据识别和重命名文件。我希望能够将第2行(令牌4)和第1行(令牌2)上的数据连接起来。以下是我目前的代码。

@echo off

for %%i in (*.csv) do (
  for /f "skip=1 token=4 delims=," %%j in ('findstr /B /I "^" "%%i"') do (
    ren "%%i" "%%j.temp_txt"
  )
)

ren *.temp_txt *.csv

1 个答案:

答案 0 :(得分:0)

以下(未经测试)批处理迭代csv并计算内容行,将var1T2 amd line2 token4中的line1 token2存储到L2T4。
生成的重命名命令存储在(伪)数组中并在最后执行 要真正执行重命名,请删除最后一行中的回显。

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set Cnt=0
for %%i in (*.csv) do (
  Set /A "Line=0,Cnt+=1"
  for /f "tokens=2,4 delims=," %%A in ('Type "%%i"') do (
    Set /A Line+=1
    If !Line! equ 1 Set "L1T2=%%A"
    If !Line! equ 2 Set "L2T4=%%B"
  )
  Set Ren[!Cnt!]=ren "%%i" "!L2T4!_!L1T2!.csv"
)
For /L %%C in (1,1,%Cnt%) Do Echo !Ren[%%C]!