使用批处理程序查找和编辑文本文件

时间:2013-05-14 18:34:21

标签: batch-file find edit

我想用批处理脚本编辑一个txt文件。 我在网上看了一下,并尝试调整一些例子以满足我的需求。 但是我没有编程技能,也无法让我的程序工作。

这是我的问题。 我有一个txt文件,在文件中的某个位置包含它:

Subcase  Mode  Buckling Eigenvalue
  321043      1     2.124238E+00
  321043      2     2.169874E+00
  321043      3     2.628187E+00
  321043      4     2.832127E+00
  321043      5     2.968359E+00
  321043      6     3.131774E+00

我想将其更改为:

R E A L   E I G E N V A L U E S

Subcase  Mode  Buckling Eigenvalue
  321043      1     2.630623E-01
  321043      2     2.676471E-01
  321043      3     2.982211E-01

所以基本上在“Subcase Mode Buckling Eigenvalue”之前添加“R E A L E I G E N V A L U E S”两行,但不删除之前的行中的whats。即添加两个新行。

我尝试过以下操作,但它只将前8行打印到新文本文件

@echo off

for /f "tokens=* delims=" %%a in (le_panel_7_cut down_i.out) do call :Change "%%a"
exit /b

:Change
set Text=%~1
if "%Text%"=="Subcase  Mode  Buckling Eigenvalue" (
(echo R E A L   E I G E N V A L U E S &echo[ &echo[ &echo[Subcase  Mode  Buckling Eigenvalue)>> D:\FEA\newfile.txt
) else (
(echo %Text%)>> D:\FEA\newfile.out
)
exit /b

我还尝试了另一个看起来像这样的脚本,但这也不起作用。

  @echo on
        SETLOCAL=ENABLEDELAYEDEXPANSION

          for /f "delims=" %%a in (le_panel_7_cut_down_i.out) do (
            set foo=%%a
            if !foo!=="Subcase  Mode  Buckling Eigenvalue" set foo=(
echo R E A L   E I G E N V A L U E S &echo[ &echo[ &echo[Subcase  Mode  Buckling Eigenvalue) 
     echo !foo! >> file3.txt) 

如果有人要更正我的剧本,我们将不胜感激。 问候 伊恩

3 个答案:

答案 0 :(得分:1)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
(
 FOR /f "delims=" %%z IN (' type eigenfile.txt^|findstr /n /r "$" ') DO (
  SET "line=%%z"
  SET "line=!line:*:=!"
  IF "!line!"=="Subcase  Mode  Buckling Eigenvalue" (
   ECHO(R E A L   E I G E N V A L U E S
   ECHO(
  )
  ECHO(!line!
 )
)>outfile.txt

FC eigenfile.txt outfile.txt

GOTO :eof

这应该执行您修改的规范。

基本上,它只是简单地再现每一行,包括空行(FINDSTR /n和后面SET ...!..:*:=!"的原因,它删除前缀为findstr的行号)。当它找到目标线时,它首先添加指定的额外两行。

请注意,echo(已被证明是各种ECHO变体的最佳选择,例如,允许空变量正确再现。

我很明显假设您的数据位于eigenfile.txt。该批次生成outfile.txt - 您重命名它的选项 - 而FC只是显示所做的更改。

答案 1 :(得分:0)

如果你想在yourfile.txt的开头添加两行,试试这个:

echo R E A L   E I G E N V A L U E S >newfile.txt
echo. >>newfile.txt
type yourfile.txt >>newfile.txt

delete yourfile.txt
rename newfile.txt yourfile.txt

答案 2 :(得分:0)

如果我误解了你的问题,请道歉,但是:

@echo off
echo R E A L   E I G E N V A L U E S > out.tmp
echo. >> out.tmp
type yourtxtfile.txt >> out.tmp
move out.tmp yourtxtfile.txt

这是你的意思吗?