我有一个目录,其中包含多个CSV,并且CSV文件名都像这样:
prod_EU_30.csv
prod_US_30.csv
prod_CHN_30.csv
prod_UK_30.csv
等
对于每个CSV文件,如何自动将具有区域名称的列添加到相应的CSV文件中,并将区域名称作为内容添加到此新创建的列中的每一行?例如,让我们来看第一个:我想在EU
到prod_EU_30.csv
的一列,并用CSV的每一行的EU
填充这个新创建的EU
列。
答案 0 :(得分:0)
这不是批处理,而是命令行实用程序(对于Linux,Max和Win)。使用此Miller(https://github.com/johnkerl/miller)命令
mlr -I --csv put '$regionName=FILENAME;$regionName=gsub($regionName,"^(.+)_(.+)_(.+)$","\2")' *.csv
对于活动文件夹中的每个CSV文件,您将获得此输出。
+-----+-----+------------+
| foo | bar | regionName |
+-----+-----+------------+
| a | z | EU |
| b | y | EU |
+-----+-----+------------+
此脚本修改您的源文件,而不是在它们的副本上使用它。
请注意,我正在使用以,
作为分隔符的CSV文件。
答案 1 :(得分:0)
(未经测试)
CASE WHEN [BitColumn] = 1 THEN 1 ELSE 0 END
注意:出于安全原因,我禁用了CAST([BitColumn] AS INT)
命令。确认@echo off
setlocal enabledelayedexpansion
for %%f in (prod_*_30.csv) do (
for /f "tokens=2 delims=_" %%r in ("%%f") do (
)for /f "delims=" %%a in (%%f) do (
echo %%a,%%r
))>%%~nf.new
ECHO move /y %%~nf.new %%f
)
)
符合您的要求后,将其删除。
答案 2 :(得分:0)
此答案和考虑的代码:
1)蝙蝠并在.csv文件所在的同一文件夹中运行
2),您无需递归使用外观和应用即可编辑.csv文件
3),您还需要在所有文件.csv
4)当然,我的英语水平比我想象的要差,请多多解释,抱歉!..
如果您要寻找纯蝙蝠解决方案,并且分隔符为“;”,那么这可能有助于您完成这项工作:
@echo off & setlocal EnableDelayedExpansion && cd /d "%~dp0" && title .\%~nx0
for /f ^tokens^=* %%i in ('%__APPDIR__%where .:*.csv')do (set "_csv=%%~fitmp"
cmd.exe /v/c <nul type nul >"!_csv!" && for /f tokens^=^2^delims^=_ %%z in ('
echo="%%~ni"')do set "_r=Region Name"&& for /f tokens^=*^delims^=^; %%I in ('
type "%%~fi"')do echo=!_r!| find "Region N" >nul && (echo=%%~I;!_r!>>"!_csv!"
set "_r=")||(echo=%%~I;%%~z>>"!_csv!"))&& move/y "!_csv!" "!_csv:~0,-3!" >nul
endlocal & exit /b
- 样本文件prod_EU_30.csv测试布局:
A;B;C;D;E;F;G;H;I;J;K;L;M;N
2;3;3;4;4;5;5;6;6;7;7;8;8;9
.;.;.;.;.;.;.;.;.;.;.;.;.;.
n;n;n;n;n;n;n;n;n;n;n;n;n;n
.;.;.;.;.;.;.;.;.;.;.;.;.;.
6;7;7;8;8;9;9;0;0;1;1;2;2;3
- 样本文件prod_EU_30.csv测试布局结果:
A;B;C;D;E;F;G;H;I;J;K;L;M;N;Region Name
2;3;3;4;4;5;5;6;6;7;7;8;8;9;EU
.;.;.;.;.;.;.;.;.;.;.;.;.;.;EU
n;n;n;n;n;n;n;n;n;n;n;n;n;n;n
.;.;.;.;.;.;.;.;.;.;.;.;.;.;EU
6;7;7;8;8;9;9;0;0;1;1;2;2;3;EU
- 糟糕::如果分隔符不是“
;
”,请替换正确的分隔符
- 如果您不需要在第一行中添加“区域名称”,请尝试:
@echo off
setlocal EnableDelayedExpansion & cd/d "%~dp0" && title .\%0
for /f ^tokens^=* %%i in ('%__APPDIR__%where ".:*.csv"')do (
set "_f=%%~fitmp" && for /f tokens^=^2^delims^=_ %%z in ('
echo="%%~ni"')do for /f tokens^=^*^delims^=^; %%I in ('
type "%%~fi"')do echo=%%~I;%%~z>>"!_f!")
move /y "!_f!" "!_f:~0,-3!" >nul
endlocal && exit /b