在文本文件中添加新行而不改变格式

在文本文件中添加新行而不改变格式

这是我的脚本:

@ECHO OFF 
SET origfile="C:\Documents and Settings\user\Desktop\test1\before.txt" 
SET tempfile="C:\Documents and Settings\user\Desktop\test1\after.txt" 
SET insertbefore=4 
FOR /F %%C IN ('FIND /C /V "" ^<%origfile%') DO SET totallines=%%C 

<%origfile% (FOR /L %%i IN (1,1,%totallines%) DO ( 
  SETLOCAL EnableDelayedExpansion 
  SET /P L= 
  IF %%i==%insertbefore% ECHO( 
  ECHO(!L! 
  ENDLOCAL 
)
) >%tempfile% 
COPY /Y %tempfile% %origfile% >NUL 
DEL %tempfile% 
pause 

我把这个存为run1.bat。运行之后,发现格式有问题,乱了。

原始文件:

header 1<--here got tab delimited format--><--here got tab delimited format--> 
header 2<--here got tab delimited format--><--here got tab delimited format-->
header 3<--here got tab delimited format--><--here got tab delimited format-->
details 1
details 2 

输出:

header 1<--tab delimited is missing--><--tab delimited is missing--> 
header 2<--tab delimited is missing--><--tab delimited is missing-->
header 3<--tab delimited is missing--><--tab delimited is missing-->

details 1
details 2 

答案1

如果你有Perl安装后,您可以使用以下命令在命令提示符窗口中:

perl -p -i -e "print qq(\n) if $. == 4" filename.txt

我确信您可以使用批处理脚本来完成此操作,但有时我认为这不值得付出努力。


更新 1:

为了将上述内容制作成可以像 bat 文件一样使用的文件,你可以创建一个脚本文件“insert4.pl”如下

#!perl
use strict;
use warnings;

open my $in, '<', 'before.txt'    or die "can't read before.txt because $!\n";
open my $out, '>', 'after.txt'    or die "can't write after.txt because $!\n";    

while (<$in>) {
  print $out $_;
  print "\n" if $. == 4;
}

close $out;
close $in;

unlink 'before.txt'               or die "can't delete before.txt because $!\n";
rename 'after.txt', 'before.txt'  or die "can't rename temp file because $!\n";

(未经测试)


更新 2:

当您安装 Perl 解释器时,它会自动将.pl文件扩展名与 Perl 解释器要运行的 Perl 脚本关联起来。您应该能够使用 来确认这一点assoc .pl,如果它显示“.pl=perlscript”,请检查ftype perlscript

安装程序还应将 perl 解释器的位置添加到PATHWindows 命令提示符使用的命令搜索中。

Perl 脚本应保存在文件扩展名为 的文件中.pl

如果以上所有都没问题,您只需输入文件名即可运行 perl 脚本myscript.pl,否则您必须明确告诉 Windows 要使用什么解释器:perl myscript.pl或者在最坏的情况下C:\strawberry\perl\bin\perl myscript.pl

相关内容