gpt4 book ai didi

java - 如何使用批处理文件删除文本文件中的前 n 行(在 Windows 上)

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:05 25 4
gpt4 key购买 nike

我有不同数量的文本文件,需要删除前 26 行。我已经尝试过下面的 bat ,但它甚至不想完成第一个文本文件。这些文件被命名为 data (1).txt、data (2).txt、data (3).txt...等。

一开始我尝试过...

more +26 "data (1).txt" > "data (1).txt.new"
move /y "data (1).txt.new" "data (1).txt"

这可行,但更改每个数字会非常耗时,因为我有大约 100 个文本文件。

然后尝试执行以下操作。

for %%f in (*.txt) do (
more +26 "%%f" > "%%f.new"
move /y "%%f.new" "%%f")

对我来说,这似乎应该有效,但事实并非如此,它只是拉出命令行并在第一个文件上停止,它确实创建了"new"文件,但看起来它只复制了原始文本文件的一半。每个文件的大小从 1MB 到 ~300MB 不等。

所以我的问题很简单..我做错了什么,有人可以提供帮助/提示吗?

更新

所以我一直在继续使用第二个选项,它似乎适用于最大 ~125MB 的文件,超过这个值它只是暂停并且没有完成操作。不确定是否有解决方案,或者可能有比使用批处理文件更好的选择。再次感谢任何帮助。

更新

我能够通过JAVA得到我想要的东西。

悲伤

import java.io.bufferedreader;
import java.io.file;
import java.io.filereader;
import java.io.filewriter;

public class cleanfiles {
public static void main(string[] args) throws exception {
string currdir = system.getproperty("user.dir");
file inputdir = new file(currdir + file.separator + "input" + file.separator);
file[] inputfiles = inputdir.listfiles();

String outputdir = currdir + file.separator + "output" + file.separator;
for (file inputfile : inputfiles) {
if (inputfile.getabsolutepath().endswith(".txt") == false) {continue; }
file outputfile = new file(outputdir + inputfile.getname() + ".csv");
bufferedreader reader = null;
try {
reader = new bufferedreader(new filereader(inputfile));
writer = new filewriter(outputfile);

string line;
while ((line = reader.readline()) !=null) {
if (line.startswith("Point")) {
writer.append(line);
writer.append("\r\n");
break;
}
}
while ((line = reader.readline()) !=null) {
writer.append(line);
writer.append("\r\n");
}
} catch (exception e) {
} finally {
try {
reader.close();
writer.flush();
writer.close();
} catch (exception e) {}
}
}
}
}

最佳答案

我建议使用sed for Windows 。您将需要从该页面链接的二进制文件和依赖项。然后,您只需在命令行的 for 循环中 sed "1,26d"infile >outfile 即可删除文件的前 26 行。无需批处理文件。

for %I in (*.txt) do (sed "1,26d" "%I" >"%I.1" && move /y "%I.1" "%I")

注意:gnuwin32 sed 有一个 -i 开关(用于内联处理),这将使语法更简单,但上次我尝试它时,它为它处理的每个实际文件留下了一个垃圾文件。我建议不要使用它。

我知道from painful experience使用流处理应用程序处理大型文本文件比批处理脚本技巧和 for/f 循环快得多。

如果您想避免使用 gnuwin32 sed 并且更愿意使用 powershell,see this question's accepted answer一个值得尝试的方法。不过,不知道它是否与 sed 一样快或更快。 Bill_Stewart 似乎对此很感兴趣。 :)

关于java - 如何使用批处理文件删除文本文件中的前 n 行(在 Windows 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26892787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com