将 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
- 将
eol
和 delims
都设置为空的神秘语法,从而保证所有行都被准确保留(前提是它们不超过 ~8191 个字符限制)
- 使用
echo(
保证正确输出,不管行(包括空行)
- 将重定向放在前面并将
echo
语句括在括号中以确保输出中没有不需要的尾随白色 space 字符
我需要将 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
- 将
eol
和delims
都设置为空的神秘语法,从而保证所有行都被准确保留(前提是它们不超过 ~8191 个字符限制) - 使用
echo(
保证正确输出,不管行(包括空行) - 将重定向放在前面并将
echo
语句括在括号中以确保输出中没有不需要的尾随白色 space 字符