将 csv/text 文件的第二个 line/row 移动到另一个 csv/text 文件的批处理文件(必须跳过 csv/text 文件的第一行)

Batch file to move second line/row of a csv/text file to another csv/text file (must skip first line of csv/text file)

我需要将 csv/text 文件的第二行移动到另一个 text/csv 文件。

我有一个删除 csv/text 文件第二行的解决方案。

csv/text 文件的第一行包含 header,不得移动或删除。

警告:路径文件夹有空格

我的代码

@echo off
Pushd "D:\Program Files\datasources\"

setlocal disableDelayedexpansion

>archive.new (
  break | for /F "tokens=*" %%F in (archive.csv) do @(
            echo %%F
            exit /b
          )
  for /F "skip=2 tokens=*" %%F in (archive.csv) do echo %%F
)

DEL /S "archive.csv"
REN "archive.new" "archive.csv"

我只需要移动另一个文件中的第二行,此代码删除 text/csv 文件的第二行。

我认为您的代码过于复杂了。每行都保存在一个或另一个文件中,因此您不妨在一个循环中读取每一行,然后根据行号选择将行写入哪个文件。

我使用 SET /A 来递增一个 ln 计数器,如果结果值为 2,那么我得到除以 0 的错误。 && 代码将所有成功行(除 2 行外)写入新存档,|| 代码将失败行(第 2 行)写入另一个文件。

@echo off
pushd "d:\Program Files\datasources\"
set "src=archive.csv"
set "file2=otherFile.csv"
set ln=0
>"%src%.new" (
  for /f usebackq^ delims^=^ eol^= %%A in ("%src%") do (
    2>nul set /a "1/(2-(ln+=1))" && (echo(%%A) || (>>"%file2%" echo(%%A)
  )
)
move /y "%src%.new" "%src%" >nul

一些额外的高级"tricks"我雇用了:

  • 使用 usebackq 以便文件名可以用引号引起来,以防名称中有 spaces 和/或有毒字符。
  • 使用 move 而不是 del 然后是 ren
  • eoldelims 都设置为空的神秘语法,从而保证所有行都被准确保留(前提是它们不超过 ~8191 个字符限制)
  • 使用echo(保证正确输出,不管行(包括空行)
  • 将重定向放在前面并将 echo 语句括在括号中以确保输出中没有不需要的尾随白色 space 字符