用另一个字符串替换每行中的匹配字符串。

问题描述 投票:0回答:1

我试图用一个递增的数字(+1)来替换给定文件每行末尾的数字。

我的输入文件是这样的

C:documents/a.txt,1988,15.01.00.0059

C:documentswe.txt,1988,15.01.00.0059

C:documents/gh.txt,1987,1988,15.01.00.0059。

我的输出文件应该是

C:documents/a.txt,1988,15.01.00.0060。

C:documentswe.txt,1988,15.01.00.0060。

C:documents/gh.txt,1988,15.01.00.0060。

我的尝试就像

@echo off 
setlocal enableextensions disabledelayedexpansion

set "search="

for /F "tokens=1-3 delims=," %%i in (%1) do (
@echo %%i %%j %%k
set "search=%%k"
)

set "replace="
REM @echo %replace%

set "textFile=%1"

for /f "delims=" %%i in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    >>"%textFile%" echo(!line:%search%=%replace%!
    endlocal
)

我可以得到15.01.00.0059从输入文件,但不知道如何改变到15.01.00.0060。

替换到相同的输入文件也是工作。我只是需要知道如何递增的值,并分配给 "替换"。

谢谢你

Bhargav.k

batch-file
1个回答
0
投票

这应该是足够灵活的。

@echo off
setlocal EnableDelayedExpansion EnableExtensions

1>out.txt (
    FOR /F tokens^=*^ delims^=.^ eol^= %%L in (input.txt) do (
        set "line=%%L"
        set "x=!line:.= !"
        FOR %%T in (!x!) do set "lastToken=%%T"

        cmd /c exit /b !lastToken!
        set/a"lstrip=!ERRORLEVEL!+1"

        >getlen.tmp echo(!lasttoken!
        FOR %%L in (getlen.tmp) do set/a"len=%%~zL-2" %= get length of last token, minus CRLF =%

        FOR %%N in (1 1 !len!) do set "lstrip=0!lstrip!" PREFIX lstrip with zeroes

        FOR %%N in (!len!) do (
            set "lstrip=!lstrip:~-%%N!"
            echo !line:~0,-%%N!!lstrip!
        )
    )
)
del getlen.tmp

ENDLOCAL

这不是一个简单的方法。脚本计算了最后一个标记前的零的数量,由 ERRORLEVEL 所回 EXIT /B,与原来的令牌相比。

© www.soinside.com 2019 - 2024. All rights reserved.