【问题标题】:Line Removal from .CSV via Batch Script通过批处理脚本从 .CSV 中删除行
【发布时间】:2019-04-10 14:21:33
【问题描述】:

我有 80 多个唯一命名的 .csv 文件,我需要从中删除前 17 行。我是编写批处理脚本的新手,但想借此机会学习。

当我将文件重命名为 test.csv 时,我已经能够使此示例代码适用于单个文件,但如果我可以使用文件名的“通配符”,那将是首选。

@echo off
set "csv=test.csv"
more +17 "%csv%" >"%csv%.new"
move /y "%csv%.new" "%csv%" >nul

文件本身已更新为没有前 17 行,并在启动时重命名。

【问题讨论】:

标签: batch-file


【解决方案1】:

试试这样:

@echo off

for %%a in (*.csv) do (
    more +17 "%%a" >"%%a.new"
    move /y "%%a.new" "%%a" >nul
)

【讨论】:

  • 在测试这两个建议时,我发现当文件超过 65,534 行数据时,两个进程都会卡住?我收到了 -- 更多 (29%) --
【解决方案2】:

这是一个基于For /? 输出的示例,在我的评论中提到。

这个直接在命令提示符下工作:

For %A In (*.csv)Do @More +17 "%A">"%A.new"&&Move /Y "%A.new" "%A">Nul

这是批处理文件的版本:

@For %%A In (*.csv)Do @More +17 "%%A">"%%A.new"&&Move /Y "%%A.new" "%%A">Nul

上面的命令与提供的其他答案几乎相同。唯一“真正”的区别是使用了&& 条件运算符,如果前一个命令More 成功,它应该只运行Move 命令。虽然More 命令失败的可能性不大,但我仍然建议实施条件语句的安全性。 如果您认为不需要该附加功能,请随意选择SachaDee 的答案(如果它解决了您的问题)。

【讨论】:

  • 我遵循了您最初的指导,一直在努力正确构建语法。在 for 之后的 /D /F 的帮助下,我被抛弃了。感谢您提供第二个解决方案,因为它很有魅力。
  • 两种样式都很好,除非文件超过 65534 行。然后它就坐着不动了?
  • 文件大小问题是由命令MoreMove 以及您选择和使用的方法引起的。您提出的问题已得到解答,您的问题超出了您的问题范围,因此应作为新问题提出。
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2021-07-16
  • 1970-01-01
  • 2018-04-12
  • 2020-05-21
相关资源
最近更新 更多