Создание командного файла для запроса ответа и замены строк текста в текстовом или INI-файле. - PullRequest
0 голосов
/ 10 марта 2020

Я заставил пакетный файл работать для первой строки, однако, когда я пытаюсь добавить дополнительный FOR l oop, чтобы получить следующую строку текста, он фактически копирует или дублирует текст вместо его замены. в настоящее время командный файл даже не изменит .txt файл. Код ниже -

::Find and Replace script allows the user to 
::define a file path, file name and a string 
::to find and replace so as to create a new file.
::
::Original file is backed up with an added extension of *.bak, in case
::the user finds the need to go back to the original.

@echo off
::Use the path from whence the script was executed as
::the Current Working Directory
set CWD=%~dp0

::***BEGIN MODIFY BLOCK***
::The variables below should be modified to the
::files to be changed and the strings to find/replace
::Include trailing backslash in _FilePath
set _FilePath=C:\
set _FileName=Password1.txt

::_WrkFile is the file on which the script will make
::modifications.
set /P Password="What is the admin Password?"
set /P AuditPassword="What is the Audit Password?"
set oldPass="cmspassword=Password1"
set OldAudit="existingauditingdbpassword=Password1"
set CMSAdmin="cmspassword="
set CMSAudit="existingauditingdbpassword="
set OldStr=%oldPass%
set OldStr2=%OldAudit%
set NewStr="%CMSAdmin%%Password%"
set NewStr2="%CMSAudit%%AuditPassword%"
::***END MODIFY BLOCK***

::Set a variable which is used by the
::search and replace section to let us
::know if the string to be modified was
::found or not.
set _Found=Not found

SETLOCAL
SETLOCAL ENABLEDELAYEDEXPANSION

if not exist "%_FilePath%%_FileName%" goto :NotFound

echo Searching for %OldStr% string...
echo.
for /f "usebackq tokens=*" %%a in ("%_FilePath%%_FileName%") do (
    set _LineChk=%%a
    if "!_LineChk!"==%OldStr% (
        SET _Found=Found 
        SET NewStr=!NewStr:^"=! 
        echo !NewStr!
        ) else (echo %%a)
        )>>"%_FilePath%%_FileName%" 2>&1

for /f "usebackq tokens=*" %%b in ("%_FilePath%%_FileName%") do (
    set _LineChk=%%b
    if "!_LineChk!"==%OldStr2% (
        SET _Found=Found 
        SET NewStr2=!NewStr2:^"=! 
        echo !NewStr2!
        )
        )
echo.
:Exit       
exit /b
...