我正在尝试编写一个批处理文件,它将在我的文本文件中搜索字符串并替换它。该字符串将是一些永不改变的数字,后跟8个代表日期的数字。我希望能够用当前日期替换该日期,但我不知道当前设置的字符串中的日期是什么,因此我只能通过搜索前4个不变的字符来搜索字符串。
例如我的文本文件中可能有一行代表123419072015(1234)我要替换为123420072015
如何通过搜索该字符串的前4个字符来替换8个字符而不知道它们是什么?
我试图通过搜索来找出问题然后想出这个,只是意识到这种方法对于我正在尝试做的事情有多么有缺陷。不用说我真的不知道我在做什么。 这将用今天的日期替换每一行,留下前4个字符。
set Today=%date:~10,4%%date:~7,2%%date:~4,2%
@echo off
setlocal enabledelayedexpansion
set INTEXTFILE=test_in.txt
set OUTTEXTFILE=test_out.txt
set SEARCHTEXT=1234
set REPLACETEXT=%Today%
SET _startchar=0
SET _length=4
set OUTPUTLINE=
for /f "tokens=1,* delims=¶" %%A in ( '"type %INTEXTFILE%"') do (
SET string=%%A
CALL SET modified=%%string:~%_startchar%,%_length%%%
echo !modified!%Today% >> %OUTTEXTFILE%
)
del %INTEXTFILE%
rename %OUTTEXTFILE% %INTEXTFILE%
当然有一个简单的解决方案吗? 我真的很难通过搜索找到任何东西。 任何帮助都会很棒!
答案 0 :(得分:1)
最简单的解决方案可能是从GnuWin32工具包中获取sed
并使用它,例如
sed "s/\b1234[0-9]\{4\}\([0-9]\{4\}\)\b/12342007\1/g" <%INPUTTEXTFILE% >%OUTPUTTEXTFILE%
根据您提供的信息,找到固定字符串1234
后跟八位数字,然后将前四位数字更改为2007
。显然,如果您的要求稍微复杂一些,可能需要调整sed
命令。
但是,尝试使用cmd
语言更容易做到这一点,尽管它已经走了很长一段路,仍然没有达到类似UNIX工具的水平
答案 1 :(得分:0)
听起来你想要像&#34; 1234 [0-9] {8}&#34;或&#34; 1234 \ d {8}&#34;如果你想捕捉独特的部分然后&#34; 1234(\ d {8})&#34;
然后你将替换为%date%$ 1,其中$ 1是()
的匹配