【问题标题】:Batch command - read csv file and create filename with multi identified content批处理命令 - 读取 csv 文件并创建具有多标识内容的文件名
【发布时间】:2017-06-08 20:41:29
【问题描述】:

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

例子:

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

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

在标记点 2 和 4 内文件的第一行和第二行,我能够识别该文件。我想用这两个数据点重命名文件。

例子

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

  • H,预计,成本
  • 1,食物,苹果,水果,55

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

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

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

  • H,预计,成本
  • 1,汽车,本田,汽车,5500

内测 (3).csv 行记录 1 和 2

  • H、实际、成本
  • 1,汽车,本田,汽车,6500

我想将以下文件重命名为

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

现在我可以使用第 2 行和第 4 个标记上的数据来识别和重命名文件。我希望能够将第 2 行 (token 4) 和第 1 行 (token 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

【问题讨论】:

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


    【解决方案1】:

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

    @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]!
    

    【讨论】:

      猜你喜欢
      • 2014-09-15
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      相关资源
      最近更新 更多