创建批处理脚本以从文本文件中删除列

时间:2013-11-13 23:49:52

标签: batch-file csv automation delimited-text

我有一个文本文件,其中的列使用竖线字符(“|”)分隔。 csv有数百列,我只想保留前254列。 如何创建一个批处理脚本,该脚本将创建一个仅包含我请求的列的新output.txt文件?

2 个答案:

答案 0 :(得分:1)

@echo off
setlocal EnableDelayedExpansion

(for /F "delims=" %%a in (input.csv) do (
   set "input=%%a"
   set "output="
   for /L %%b in (1,1,254) do (
      for /F "tokens=1* delims=|" %%c in ("!input!") do (
         set "output=!output!|%%c"
         set "input=%%d"
      )
   )
   echo !output:~1!
)) > output.txt

答案 1 :(得分:0)

批处理/ jscript混合脚本解决方案。如果保存为split.cmd,请使用

进行呼叫

type inputfile.txt | split.cmd "|" 254 > outputfile.txt

@if (@This==@IsBatch) @then
@echo off
rem **** batch zone *********************************************************
    setlocal enableextensions

    rem arguments : delimiter numberOfColumns

    set "delimiter=%~1"
    if not defined delimiter set "delimiter=,"

    set "columns=%~2"
    if not defined columns set "columns=10000"

    cscript //nologo //e:Javascript "%~f0" 

    endlocal
    exit /b

@end
// **** Javascript zone *****************************************************
    var IN  = WScript.StdIn, 
        OUT = WScript.StdOut;
    var shell       = WScript.CreateObject("WScript.Shell"),
        delimiter   = shell.Environment("PROCESS").Item("delimiter"), 
        columns     = shell.Environment("PROCESS").Item("columns") ; 

    while ( ! IN.AtEndOfStream ){
        OUT.WriteLine(IN.ReadLine().split(delimiter).slice(0,columns).join(delimiter));
    };