2015-07-20 43 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工具的水平。

相關問題