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

Batch file 创建批处理脚本以从txt文件中删除列,batch-file,csv,automation,delimited-text,Batch File,Csv,Automation,Delimited Text,我有一个文本文件,其中的列使用管道字符(“|”)分隔。 csv有数百列,我只想保留前254列。 如何创建一个批处理脚本来创建一个新的output.txt文件,其中只包含我请求的列?和一个批处理/jscript混合脚本解决方案。如果另存为split.cmd,请使用 @echo off setlocal EnableDelayedExpansion (for /F "delims=" %%a in (input.csv) do ( set "input=%%a" set "output

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

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

@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
键入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));
    };