批处理命令 - 读取 csv 文件并创建具有多个识别内容的文件名
Batch command - read csv file and create filename with multi identified content
我有多个文件,每个文件都具有相同的文件名
示例:
- Test.csv
- 测试 (1).csv
- 测试(2).csv
- 测试(3).csv
但是每个文件中的内容是不同的。
在标记点 2 和 4 中的文件的第一行和第二行,我能够识别该文件。我想用这两个数据点重命名文件。
例子
在 Test.csv 文件中,行记录 1 和 2
- H,预计,成本
- 1,食物,苹果,水果,55
Within Test (1).csv line record 1 and 2
- H,实际,成本
- 1,食物,苹果,水果,45
Within Test (2).csv line record 1 and 2
- H,预计,成本
- 1,汽车,本田,汽车,5500
Within Test (3).csv line record 1 and 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 行(令牌 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
以下(未经测试的)批次迭代 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]!
我有多个文件,每个文件都具有相同的文件名
示例:
- Test.csv
- 测试 (1).csv
- 测试(2).csv
- 测试(3).csv
但是每个文件中的内容是不同的。
在标记点 2 和 4 中的文件的第一行和第二行,我能够识别该文件。我想用这两个数据点重命名文件。
例子
在 Test.csv 文件中,行记录 1 和 2
- H,预计,成本
- 1,食物,苹果,水果,55
Within Test (1).csv line record 1 and 2
- H,实际,成本
- 1,食物,苹果,水果,45
Within Test (2).csv line record 1 and 2
- H,预计,成本
- 1,汽车,本田,汽车,5500
Within Test (3).csv line record 1 and 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 行(令牌 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
以下(未经测试的)批次迭代 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]!