这是我的脚本:
@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 解释器的位置添加到PATH
Windows 命令提示符使用的命令搜索中。
Perl 脚本应保存在文件扩展名为 的文件中.pl
。
如果以上所有都没问题,您只需输入文件名即可运行 perl 脚本myscript.pl
,否则您必须明确告诉 Windows 要使用什么解释器:perl myscript.pl
或者在最坏的情况下C:\strawberry\perl\bin\perl myscript.pl
。