Board logo

标题: [文本处理] 批处理怎样将CSV文件里的某几列/指定列删除并保存到其他目录? [打印本页]

作者: rickyho    时间: 2011-8-23 00:29     标题: 批处理怎样将CSV文件里的某几列/指定列删除并保存到其他目录?

问问各位,怎样才能将某目录下(如c:\1)的*.CSV(逗号分隔)类的EXCEL文件删除某几列(如图中的6,7),并保存到其他目录(如c:\2),谢谢
作者: rickyho    时间: 2011-8-23 08:59

能帮帮忙吗,谢谢
作者: ArdentMan    时间: 2011-8-23 20:10

如果每列数据中没有空格、Tab以及其他默认分隔符:
  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. Set "OldPath=C:\1"&Rem 要读取的目录
  3. Set "NewPath=C:\2"&Rem 要保存的目录
  4. Set "Number=6 7"&Rem 要删除的列集合
  5. For %%i In (%OldPath%\*.csv) Do (
  6.   (For /F "usebackq delims=" %%j In ("%%i") Do (
  7.     Set /A Count=0&Set "Str="
  8.     For %%k In (%%j) Do (
  9.       Set /A Count+=1&Set "Flag=A"
  10.       For %%l In (%Number%) Do If %%l EQU !Count! Set "Flag="
  11.       If Defined Flag Set "Str=!Str!,%%k"
  12.     )
  13.     Echo !Str:~1!
  14.    ))>"%NewPath%\%%~nxi"
  15. )   
复制代码

作者: rickyho    时间: 2011-8-23 22:12

谢谢ArdentMan ,忘了说是有空格的,那如果有空格等分隔符呢,该怎样,因为8,9那两列数据都有空格的,出来的效果变了,如图,再次谢谢!
作者: ArdentMan    时间: 2011-8-24 11:33

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. Set "OldPath=C:\1"&Rem 要读取的目录
  3. Set "NewPath=C:\2"&Rem 要保存的目录
  4. Set "Number=6 7"&Rem 要删除的列集合
  5. For %%i In (%OldPath%\*.csv) Do (
  6.   (For /F "usebackq delims=" %%j In ("%%i") Do (
  7.     Set /A Count=0&Set "Str="
  8.     Set "Var=%%j"&Set "Var=!Var: =@@@@@@!"
  9.     For %%k In (!Var!) Do (
  10.       Set /A Count+=1&Set "Flag=A"
  11.       For %%l In (%Number%) Do If %%l EQU !Count! Set "Flag="
  12.       If Defined Flag Set "Str=!Str!,%%k"
  13.     )
  14.     Set "Str=!Str:@@@@@@= !"&Echo !Str:~1!
  15.    ))>"%NewPath%\%%~nxi"
  16. )
复制代码

作者: rickyho    时间: 2011-8-24 23:05

谢谢,想问问“要读取的目录”和“要保存的目录”可各修改成其他的目录吗,我尝试改成其他目录的,一运行批处理文件屏幕就一闪而过了,没处理,而不改维持原来的“c:\1和c:\2",这样就正常,谢谢ArdentMan
作者: rickyho    时间: 2011-8-25 21:11

自己再顶一下,求助
作者: rickyho    时间: 2011-8-26 17:39

谢谢,想问问“要读取的目录”和“要保存的目录”可各修改成其他的目录吗,我尝试改成其他目录的,一运行批 ...
rickyho 发表于 2011-8-24 23:05



    再恳请下各位帮帮忙,谢谢!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2