我想用批处理脚本编辑一个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)
如果有人要更正我的剧本,我们将不胜感激。 问候 伊恩
答案 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
这是你的意思吗?