Мне нужно найти и вставить значение - PullRequest
0 голосов
/ 18 февраля 2019

Я пишу скрипт, который должен найти числовые значения или цифры в текстовом файле и заменить его вводом с клавиатуры.

Я искал в Интернете и просто не могу найтиправильный способ сделать это.

Текстовый файл содержит следующее:

C:\Progra~1\Java\userapp\fundays\jv10_80cl1\test

Мне нужно изменить часть "80cl1" на новые значения, например: 80cl1 меняется на 84cl3

:begin1
setlocal ENABLEEXTENSIONS
setlocal ENABLEDELAYEDEXPANSION
SET /P E= new value 1: 

FOR /F "tokens=1 delims=:" %%a in (install.txt) do findstr /r "^[1-9][0-9]*$"
    echo "%%a"

SET /P R= New value 2: 

FOR /F "tokens=1 delims=:" %%a in (install.txt) do findstr /r "^[1-9][0-9]*$"
    echo "%%a"

Итак, скрипт должен найти эти значения и изменить их с помощью ввода с клавиатуры.

1 Ответ

0 голосов
/ 18 февраля 2019

Нечто подобное должно помочь.Вы можете изменить set /p, чтобы он не отображал подсказку, и просто присвоить ему значение, в любом случае будет работать:

@echo off
setlocal enabledelayedexpansion

set inputfile=install.txt
set /p "_strfind=Enter value to search?"
set /p "_strinsert=Replacement value?"
for /f "tokens=*" %%a in ('type "%inputfile%" ^| find /v /n "" ^& break ^> "%inputfile%"') do (
    set "str=%%a"
    set "str=!str:%_strfind%=%_strinsert%!"
    set "str=!str:*]=!"
    >>%inputfile% echo(!str!
)

Если вы не хотите, чтобы вас помповали, просто установите значения перед рукой:

@echo off
setlocal enabledelayedexpansion

set inputfile=install.txt
set "_strfind=80cl1"
set "_strinsert=84cl3"
for /f "tokens=*" %%a in ('type "%inputfile%" ^| find /v /n "" ^& break ^> "%inputfile%"') do (
    set "str=%%a"
    set "str=!str:%_strfind%=%_strinsert%!"
    set "str=!str:*]=!"
    >>%inputfile% echo(!str!
)

Если по каким-либо причинам ваш файл может содержать !, он не будет копировать их в файл, тогда просто используйте это:

@echo off
set "inputfile=ip.txt"
set /p "_strfind=string to replace?"
set /p "_strinsert=replacement string?"
for /f "tokens=*" %%a in ('type "%inputfile%" ^| find /v /n "" ^& break ^> "%inputfile%"') do (
    set "str=%%a"
    setlocal enabledelayedexpansion
    set "str=!str:%_strfind%=%_strinsert%!"
    call set "str=%%str:*]=%%"
    >>%inputfile% echo(!str!
    endlocal
)

Правка согласно вашему комментарию:

@echo off
set "inputfile=install.txt"
set /p "_strfind=string to replace? "
set /p "_strinsert=replacement string? "
set /p "_strfind2=enter Executable numeric value to replace? "
set /p "_strinsert2=enter the replacement value for executable? "
set "_strfind2=%_strfind2%.exe"
set "_strinsert2=%_strinsert2%.exe" 
for /f "tokens=*" %%a in ('type "%inputfile%" ^| find /v /n "" ^& break ^> "%inputfile%"') do (
    set "str=%%a"
    setlocal enabledelayedexpansion
    set "str=!str:%_strfind%=%_strinsert%!"
    set "str=!str:%_strfind2%=%_strinsert2%!"
    call set "str=%%str:*]=%%"
    >>%inputfile% echo(!str!
    endlocal
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...