我有一个脚本,允许我从csv文件中提取特定列。 我的目标主题是将我的脚本应用于我的目录中的所有csv文件。
@echo off>fourcol.csv
setlocal
for /f "tokens=1-22* delims=," %%1 in (ManyColumns.csv) do (
echo %%4,%%5,%%6>>fourcol.csv
)
type fourcol.csv
将脚本应用于我的目录中的所有csv文件
删除重复项
FileA.csv ... FileZ.csv
server1的,戴尔,1.0.1,server1的,戴尔,28/06/2016,...
服务器2,HP,1.0.2,服务器2,HP,29/06/2016,...
服务器3,戴尔,1.2.1,服务器3,戴尔,30/06/2016,...
服务器4,HP,1.3.1,服务器4,HP,27/06/2016,...
服务器3,戴尔,1.2.1,服务器3,戴尔,30/06/2016,...
服务器4,HP,1.3.1,服务器4,HP,27/06/2016,...
我的CSV文件具有相同的标题和相同的数据。
应用脚本后的输出(无重复):
server1的,戴尔,1.0.1
服务器2,HP,1.0.2
服务器3,戴尔,1.2.1
服务器4,HP,1.3.1
答案 0 :(得分:0)
应该做一些小改动:
不要将数字用作for
循环变量。它们保留用于命令行参数。
使用dir /b *.csv
获取要处理的文件列表。
从令牌1 不令牌4开始,提取前三列。
使用第一个for
循环处理每个文件,使用第二个(嵌套的)for
循环来处理文件中的行。
注意:
delims=,
可能无法执行您想要的操作(如果文件中包含逗号,
的值)。尝试以下批处理文件(test.cmd):
@echo off
setlocal
rem remove output file if it already exists
if exist fourcol.csv del fourcol.csv
rem loop through the csv files
for /f "usebackq" %%a in (`dir /b *.csv`) do (
rem loop through the lines in each file
for /f "usebackq tokens=1,2,3 delims=," %%b in (%%a) do (
echo %%b,%%c,%%d>>fourcol.csv
)
)
rem add code here to strip duplicates
endlocal
test.csv:
server1,Dell,1.0.1,server1,Dell,28/06/2016,...
server2,Hp,1.0.2,server2,Hp,29/06/2016,...
server3,Dell,1.2.1,server3,Dell,30/06/2016,...
server4,Hp,1.3.1,server4,Hp,27/06/2016,...
server3,Dell,1.2.1,server3,Dell,30/06/2016,...
server4,Hp,1.3.1,server4,Hp,27/06/2016,...
fourcol.csv:
server1,Dell,1.0.1
server2,Hp,1.0.2
server3,Dell,1.2.1
server4,Hp,1.3.1
server3,Dell,1.2.1
server4,Hp,1.3.1