我有各种数量的文本文件需要删除前26行。我尝试了下面的蝙蝠,但它甚至不想完成第一个文本文件。这些文件名为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得到我想要的东西。
SADD
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) {}
}
}
}
}

答案 0 :(得分:1)
我建议使用sed for Windows。您将需要从该页面链接的二进制文件和依赖项。然后,您可以在命令行的sed "1,26d" infile >outfile
循环中for
删除文件的前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似乎对此充满热情。 :)
答案 1 :(得分:0)
如果您注意到输出文件的最后一行,您会注意到您的方法的局限性。当行数超过~65535时,MORE挂起,等待用户按键。
您可以改为使用for循环:
for %%I in (*.txt) do for /f "delims=, tokens=* skip=26" %%x in (%%I) do echo %%x >> "%%I.new"