2015-07-20 47 views
2

我想写一个批处理文件,它将搜索我的文本文件中的字符串并将其替换。该字符串将是一些数字,永远不会改变,随后是代表日期的8个数字。我希望能够用当前日期替换该日期,但我不知道当前字符串中的日期是什么,所以我只能通过搜索那些前4个不变的字符来搜索字符串。当我只知道前几个字符时替换一个字符串

例如我的文本文件可能在这几行:123419072015(1234),我想123420072015

更换如何更换8个字符,不知道它们是什么,通过搜索前4该字符串的字符?

我试图通过搜索找出一些东西,并提出了这个,只是为了意识到这种方法是如何有缺陷的,我想要做的。不用说我不知道​​我在做什么。 这将用今天的日期替换每一行,留下前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

将'\ b1234 \ d {8} \ b'替换为'1234' + cur_date –

+0

您是否使用Windows .BAT/CMD文件卡住了? – schtever

+0

另外,在您的示例中,您将显示一些括号,最后划分要删除的数据。这总是如此吗? – schtever

回答

0

这听起来像你想要一个模式,如“1234 [0-9] {8}”或“1234 \ d {8}”,如果你想捕捉独特的部分,然后“1234(\ d {8} )”

,那么你会用%日期%$ 1更换其中的$ 1从()

1

比赛也许最简单的解决办法是从GnuWin32工具得到sed和使用它,像

sed "s/\b1234[0-9]\{4\}\([0-9]\{4\}\)\b/12342007\1/g" <%INPUTTEXTFILE% >%OUTPUTTEXTFILE% 

这是基于您提供的信息,找到固定字符串1234后跟八位数字,然后将这些数字中的前四位更改为2007。显然,如果您的要求稍微复杂一点,则可能需要调整sed命令。

但是要做到这一点比试图在cmd语言中做得更容易,虽然这种语言虽然有很长的路要走,但仍然没有达到类似UNIX工具的水平。