批处理脚本-根据文件名将列添加到CSV

时间:2019-12-20 08:46:57

标签: csv batch-file

我有一个目录,其中包含多个CSV,并且CSV文件名都像这样:

prod_EU_30.csv
prod_US_30.csv
prod_CHN_30.csv
prod_UK_30.csv

对于每个CSV文件,如何自动将具有区域名称的列添加到相应的CSV文件中,并将区域名称作为内容添加到此新创建的列中的每一行?例如,让我们来看第一个:我想在EUprod_EU_30.csv的一列,并用CSV的每一行的EU填充这个新创建的EU列。

3 个答案:

答案 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