Batch file 我正在编写一个.bat程序,在不改变文件位置的情况下查找和替换文件中的文本
我正在编写一个.bat程序,它将查找并替换文件中的文本。我遇到的问题是,它删除了空行,留下来证明其他行的合理性。我需要空白行保留和新的文本留在同一地点。这是我写的,也是结果。谁能帮忙吗 节目:Batch file 我正在编写一个.bat程序,在不改变文件位置的情况下查找和替换文件中的文本,batch-file,Batch File,我正在编写一个.bat程序,它将查找并替换文件中的文本。我遇到的问题是,它删除了空行,留下来证明其他行的合理性。我需要空白行保留和新的文本留在同一地点。这是我写的,也是结果。谁能帮忙吗 节目: @ECHO OFF cls cd\ c: setLocal EnableDelayedExpansion For /f "tokens=* delims= " %%a in (samplefile.tx) do ( Set str=%%a set str=!str:day=night! set str=
@ECHO OFF
cls
cd\
c:
setLocal EnableDelayedExpansion
For /f "tokens=* delims= " %%a in (samplefile.tx) do (
Set str=%%a
set str=!str:day=night!
set str=!str:winter=summer!
echo !str!>>samplefile2.txt)
ENDLOCAL
cls
exit
样本文件:
this line is the first line in my file that I am using as an example.This is made up text
the cat in the hat
day
winter
结果如下:
this line is the first line in my file that I am using as an example.This is made up text
the cat in the hat
night
summer
我需要的行,空格和新的文本保持在相同的位置,而使文本替换。请帮助@ECHO关闭
SETLOCAL
(
对于('find/n/v”“q27459813.txt')中的/f“tokens=1*delims=]”%%a(
设置“行=%%b”
如果定义了行(调用:subs)或ELSE(ECHO()
)
)>newfile.txt
后藤:EOF
:潜艇
设置“行=%line:day=night%”
设置“行=%line:winter=summer%”
回音(%line%)
后藤:eof
这应该对你有用。我使用了一个名为q27459813.txt
的文件,其中包含用于测试的数据
生成newfile.txt
如果数据文件行开始]
将无法正常工作
修改为允许前导
]
@ECHO关闭
SETLOCAL
(
对于/f“delims=“%%a IN('type q27459813.txt^ find/n/v”“)DO(
设置“行=%%a”
呼叫:潜艇
)
)>newfile.txt
后藤:EOF
:潜艇
设置“行=%line:*]=%”
如果未定义行回显(&GOTO):EOF
设置“行=%line:day=night%”
设置“行=%line:winter=summer%”
回音(%line%)
后藤:eof
- 使用
将修剪前导空格。相反,使用“tokens=*delims=“
保留前导空格“delims=“
- FOR/F总是跳过空行。诀窍是在每行前面插入一些内容。通常使用
或FIND
在每行前面插入行号FINDSTR
- 您可以使用
从FINDSTR中删除行号前缀!var:::=!
- 使用
防止行为空时echo(!str!
消息echo关闭
- 只重定向一次更有效(更快)
@echo关闭
setlocal enableDelayedExpansion
>samplefile2.txt(
对于/f“delims=“%%A in('findstr/n“^”samplefile.txt'),请执行以下操作:(
设置“str=%%A”
设置“str=!str::=!”
设置“str=!str:day=night!”
设置“str=!str:winter=summer!”
回声(!str!
)
)
这仍然有一个潜在的问题。当由于延迟扩展而扩展%%a
时,它将损坏包含!
的行。诀窍是在循环中打开和关闭延迟扩展
@echo off
setlocal disableDelayedExpansion
>samplefile2.txt (
for /f "delims=" %%A in ('findstr /n "^" samplefile.txt') do (
set "str=%%A"
setlocal enableDelayedExpansion
set "str=!str:*:=!"
set "str=!str:day=night!"
set "str=!str:winter=summer!"
echo(!str!
endlocal
)
)
或者,您可以完全忘记自定义批处理,使用my获得更简单、更快的解决方案。可以选择指定多个文字搜索/替换对
jrepl "day winter" "night summer" /t " " /l /i /f sampleFile.txt /o sampleFile2.txt
我使用了
/I
选项使搜索不区分大小写。但如果愿意,您可以放弃该选项使其区分大小写。使用纯批处理无法轻松做到这一点。非常感谢大家……我将尝试一下!