这很可能是一个非常简单的问题,但现在就去了。
我需要按特定顺序搜索文件中的数字,然后为每个数字添加5个/ 例如:
时间hr:1,st:2,ps:10(这就是我要寻找的 - 整个文件中会有各种其他数字)
我希望用+5替换数字
时间hr:6,st:7,ps:15
答案 0 :(得分:0)
批处理不是文本处理的最佳选择,尤其是与您的要求一样复杂的东西。可以使用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