Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Замена текста. (http://forum.oszone.net/showthread.php?t=301186)

TranCrey 14-06-2015 21:48 2518573

Замена текста.
 
Код:

@echo off
Setlocal Enabledelayedexpansion Enableextensions
 
Set From=9430
Set Into=(какое выражение вставить?)
Set Filename=list.txt
Set NewFileName=file.txt
 
if exist "%NewFileName%" del "%NewFileName%"
for /F "UseBackQ delims= eol=" %%A in ("%filename%") do (
  Set St=%%A
  Set St=!ST:%From%=%Into%!
  Echo !St!>>"%NewFileName%"
)

В list 10000 строк,все они одинаковые.
Как в такого виде bat файле сделать что бы число 9430 заменялось на числа возрастающие от 1 до 10000 по строчно.

Iska 14-06-2015 23:46 2518599

Воспользуйтесь sed — Википедия: sed for Windows.

Iska 15-06-2015 00:18 2518604

Цитата:

Цитата TranCrey
Как в такого виде bat файле сделать что бы число 9430 заменялось… »

Примерно так:
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1
set sFindWhat=9430
set /a iReplaceWith = 0

call :GetTemporaryName

if defined sSourceFile (
        if exist "%sSourceFile%" (
                >"%TemporaryName%" (
                        for /f "usebackq delims=" %%i in (
                                "%sSourceFile%"
                        ) do (
                                set /a iReplaceWith += 1
                                set sLine=%%~i
                                call echo %%sLine:!sFindWhat!=!iReplaceWith!%%
                        )
                )
               
                if exist "%sSourceFile%.bak" del /f /q "%sSourceFile%.bak"
                ren "%sSourceFile%" "%sSourceFile%.bak"
                >nul copy "%TemporaryName%" "%sSourceFile%"
                del /f /q "%TemporaryName%"
        ) else (
                echo Can't find source file [%sSourceFile%].
                exit /b 2
        )
) else (
        echo Usage: %~nx0 ^<Source file^>
        exit /b 1
)

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetTemporaryName()
rem ==========================================================================
:GetTemporaryName
        setlocal enableextensions enabledelayedexpansion
       
:NextName
        set sTempName=%temp%\temp%random%.tmp
       
        if exist "%sTempName%" goto :NextName
       
        set sProcName=%~0
       
        endlocal & set %sProcName:~4%=%sTempName%
        exit /b 0
rem ==========================================================================



Если же действительно:
Цитата:

Цитата TranCrey
В list 10000 строк,все они одинаковые. »

то проще тупо взять одну строку (первую) и перечислить её 10000 раз:
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1
set sFindWhat=9430
set /a iReplaceWith = 0

call :GetTemporaryName

if defined sSourceFile (
        if exist "%sSourceFile%" (
                <"%sSourceFile%" >nul set /p sLine=
                >"%TemporaryName%" (
                        for /l %%i in (1, 1, 10000) do (
                                call echo %%sLine:!sFindWhat!=%%~i%%
                        )
                )
               
                if exist "%sSourceFile%.bak" del /f /q "%sSourceFile%.bak"
                ren "%sSourceFile%" "%sSourceFile%.bak"
                >nul copy "%TemporaryName%" "%sSourceFile%"
                del /f /q "%TemporaryName%"
        ) else (
                echo Can't find source file [%sSourceFile%].
                exit /b 2
        )
) else (
        echo Usage: %~nx0 ^<Source file^>
        exit /b 1
)

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetTemporaryName()
rem ==========================================================================
:GetTemporaryName
        setlocal enableextensions enabledelayedexpansion
       
:NextName
        set sTempName=%temp%\temp%random%.tmp
       
        if exist "%sTempName%" goto :NextName
       
        set sProcName=%~0
       
        endlocal & set %sProcName:~4%=%sTempName%
        exit /b 0
rem ==========================================================================


Имя исходного файла задаётся параметром пакетного файла (также можно просто перетащить исходный файл на пакетный файл в Проводнике).


Время: 09:21.

Время: 09:21.
© OSzone.net 2001-