首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用批处理程序查找和编辑txt文件

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

Stack Overflow用户
提问于 2013-05-15 02:34:21
回答 3查看 308关注 0票数 0

我想用批处理脚本编辑一个txt文件。我已经在网上看过了,并尝试调整一些示例以适应我的需求。然而,我没有编程技能,也不能让我的程序正常工作。

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

代码语言:javascript
复制
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

我想将其更改为如下所示:

代码语言:javascript
复制
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

所以基本上在“子格模态屈曲本征值”前加两行"R E A L E I G E N V A L U E S“,但不删除前面几行中的内容。即在中添加两个新行。

我尝试了以下方法,但它只将前8行打印到新的文本文件

代码语言:javascript
复制
@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

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

代码语言:javascript
复制
  @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) 

如果有人来纠正我的脚本,它将非常感谢。问候Iain

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-15 08:26:56

代码语言:javascript
复制
@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
EN

Stack Overflow用户

发布于 2013-05-15 02:47:36

如果您想在yourfile.txt的开头添加两行,可以尝试这样做:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2013-05-15 02:48:04

如果我误解了你的问题,很抱歉,但是:

代码语言:javascript
复制
@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

这就是你的意思吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16550347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档