Показать полную графическую версию : Замена текста.
TranCrey
14-06-2015, 21:48
@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 по строчно.
Воспользуйтесь sed — Википедия (https://ru.wikipedia.org/wiki/Sed): sed for Windows (http://gnuwin32.sourceforge.net/packages/sed.htm).
Как в такого виде 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 ==========================================================================
Если же действительно:
В 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 ==========================================================================
Имя исходного файла задаётся параметром пакетного файла (также можно просто перетащить исходный файл на пакетный файл в Проводнике).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.