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