2014-10-27 78 views
0

這很可能是一個非常簡單的問題,但在這裏。使用查找/替換公式

我需要搜索以一定的順序對數字的文件,再加入5到每個數/ 例:

時間小時:1,ST:2,PS:10(就是我要尋找爲 - 會出現在整個文件中各種其他號碼)

我想它與+5

時間小時更換號碼:6,ST:7,PS:15

回答

0

批處理不是文本處理的最佳選擇,特別是作爲補償的東西lex作爲您的要求。使用JScript,VBScript或PowerShell可以簡單得多。但它可能與批處理...

沒有任何簡單的批處理命令,可以做你想做的。你必須編寫你自己的代碼來讀取每一行,如果它不符合格式,請不要改變。如果它與格式匹配,則解析該行以提取數字,使用SET/A遞增它們,並寫出新行。

你不能直接修改你的文件。相反,您必須寫入臨時文件。完成後,將臨時文件移至原始名稱。

我會假設感興趣的格式化文本沒有嵌入到較大的行中。

您不指示文件中的其他內容。空行和感嘆號可能會導致問題。我假設他們可能在場,所以如果他們不是,那麼代碼會比需要的複雜得多。

我使用FINDSTR/N爲每行插入一個行號前綴來保護空行。在將行寫入新文件之前,必須先剝離該前綴。

感嘆號通過在循環中打開和關閉延遲擴展來保護。如果在擴展FOR變量時啓用延遲擴展,那麼如果它包含感嘆號,則該值將被破壞。

@echo off 
setlocal disableDelayedExpansion 
>"yourFile.txt.new" (
    for /f "delims=" %%L in ('findstr /n "^" "yourFile.txt"') do (
    for /f "delims=:, tokens=1-7*" %%A in ("%%L") do (
     if "%%B %%D %%F%%H" equ "time hr st ps" (
     set /a "hr=%%C+5, st=%%E+5, ps=%%G+5" 
     setlocal enableDelayedExpansion 
     echo time hr:!hr!,st:!st!,ps:!ps! 
     endlocal 
    ) else (
     set "ln=%%L" 
     setlocal enableDelayedExpansion 
     echo(!ln:*:=! 
     endlocal 
    ) 
    ) 
) 
) 
::move /y "yourFile.txt.new" "yourFile.txt" >nul 
type yourFile.txt.new 
+0

好的,謝謝,我會玩那個。 – cjh7103 2014-10-28 11:29:19