2015-01-15 6 views
0

INI 파일의 특정 줄에서 특정 3 자 문자열을 제거하여 ini 파일을 편집하는 배치 파일을 만듭니다 (이 경우 dbside = 라인). 본질적으로 다음 문자열 중 하나 인 경우 : Djg, Msc, Sbf, Zml, Sbi, Sge, Sgs, Ssb, Sus, Srz, Zhp, Zsq, Zsm, Zrg 이 dbside = 새로운 ini 파일을 저장하십시오.INI의 특정 줄에서 특정 문자를 삭제하고 변경 내용을 저장합니다.

지금까지 내가 가진 : 기본적으로

setlocal enabledelayedexpansion 

@for /f "tokens=2*" %%a in ('REG Query "HKCU\SOFTWARE\Zephyr Associates, Inc." /v StyleDir') do set "StyleDir=%%~b" 

@for /f "tokens=2*" %%a in ('REG Query "HKLM\SOFTWARE\Zephyr Associates, Inc." /v StyleDir') do set "StyleDir=%%~b" 

@for /f "tokens=2*" %%a in ('REG Query "HKLM\SOFTWARE\Wow6432Node\Zephyr Associates, Inc." /v StyleDir') do set "StyleDir=%%~b" 

의는 INI 파일, 나는 실제로 "% StyleDir % \ Style.ini"

을 수정하는 몇 가지 다른 일을 시도했습니다되는 레지스트리 요청

어떤 도움은 매우

편집

그래서를 감사, 내가 학사 학위를 취득 할 수있었습니다 이후 오랜만이야 이 프로젝트에. 모두가 그것을 가지고 있도록 INI 파일의 처음 몇 줄은 다음과 같습니다

[Default] 
    DataHome=C:\ProgramData\Zephyr\Data 
    SQLiteHome=c:\programdata\zephyr\data 
    [DataBaseList] 
    DbsId=Mng,Fnd,Set,Stl,Isa,Zac,Djg,Msc,Sbf,Zml,Sbi,Sge,Sgs,Ssb,Sus,Srz,Zhp,Zsq,Zsm,Zrg,Zin,Ecn,Ind,Man 
    CustDbSId=Man 
    [ZephyrApps] 
    SAName=Style.exe 
    AAName=Alloc.exe 
    SAVersion=8.4.0 

내가 찾고 결과는 다음과 같습니다

[Default] 
    DataHome=C:\ProgramData\Zephyr\Data 
    SQLiteHome=c:\programdata\zephyr\data 
    [DataBaseList] 
    DbsId=Mng,Fnd,Set,Stl,Isa,Zac,Zin,Ind,Ecn,Man 
    CustDbSId=Man 
    [ZephyrApps] 
    SAName=Style.exe 
    AAName=Alloc.exe 
    SAVersion=8.4.0 

또는 접근은 단지에 다시 쓰기 수 DbsID = CustDbsID에 어떤 MNG, FND, 설정, STL, 사 슥, 진, 공업, ECN +와 내가 지금까지있어 거친 것은

입니다 =

@echo off 
    for /f "tokens=2*" %%a in ('REG Query "HKCU\SOFTWARE\Zephyr Associates, Inc." /v StyleDir 2^>nul') do set "StyleDir=%%~b" 

    for /f "tokens=2*" %%a in ('REG Query "HKLM\SOFTWARE\Zephyr Associates, Inc." /v StyleDir 2^>nul') do set "StyleDir=%%~b" 

    for /f "tokens=2*" %%a in ('REG Query "HKLM\SOFTWARE\Wow6432Node\Zephyr Associates, Inc." /v StyleDir 2^>nul') do set "StyleDir=%%~b" 2^>nul 
    CD %StyleDir% 

    for /f "tokens=2 delims==" %%a in ('findstr DbsId style.ini') do set DbsId=%%a 
    echo=%DbsId% 
    pause 
    set string=%DbsId% 
     set string=%DbsId:Djg,= % 
    set string=%DbsId% 
     set string=%DbsId:Sbf,= % 
    set string=%DbsId% 
     set string=%DbsId:Zml,= % 
    set string=%DbsId% 
     set string=%DbsId:Sbi,= % 
    set string=%DbsId% 
     set string=%DbsId:Sge,= % 
    set string=%DbsId% 
     set string=%DbsId:Sgs,= % 
    set string=%DbsId% 
     set string=%DbsId:Ssb,= % 
    set string=%DbsId% 
     set string=%DbsId:Sus,= % 
    set string=%DbsId% 
     set string=%DbsId:Srz,= % 
    set string=%DbsId% 
     set string=%DbsId:Zhp,= % 
    set string=%DbsId% 
     set string=%DbsId:Zsq,= % 
    set string=%DbsId% 
     set string=%DbsId:Zsm,= % 
    set string=%DbsId% 
     set string=%DbsId:Zrg,= % 
    pause 

일시 중지는 내가하고있는 일을하고 있는지 확인하기위한 것입니다. 물론 이것은 파일을 백업하고 교체하기 전입니다.

정직하게 말하면, 내가받은 답변 중 일부를 이해하지 못했기 때문에이 작업이 내가하려는 일을 명확히하기를 바랍니다. 이전에는 양질의 정보를 제공하지 않아서 유감입니다.

답변

0
@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
:: make a tempfile 
:maketemp 
SET "tempfile=%temp%\%random%" 
IF EXIST "%tempfile%*" (GOTO maketemp) ELSE (ECHO.>"%tempfile%a") 
SET "styledir=c:\106x" 
SET "inifile=q27973295.txt" 
(
FOR /f "usebackq delims=" %%a IN ("%styledir%\%inifile%") DO (
    FOR /f "tokens=1*delims==" %%b IN ("%%a") DO (
    IF /i "%%b"=="dbside" (
    SET "line=%%c" 
    FOR %%d IN (Djg,Msc,Sbf,Zml,Sbi,Sge,Sgs,Ssb,Sus,Srz,Zhp,Zsq,Zsm,Zrg) DO SET "line=!line:%%d=!" 
    ECHO(dbside=!line! 
    ) ELSE (
    ECHO(%%a 
    ) 
) 
) 
)>"%tempfile%a" 

TYPE "%tempfile%a" 
REM move "%tempfile%a" "%styledir%\%inifile%" 

GOTO :EOF 

당신은 이미 임시 파일의 결과가 발생

styledir - I used a convenient directory and recorded this dummy data (a smaple would have been good...) in a file named q27973295.txt`

junk junk 
whatever and so on 
dbside=waffle waffle Djg leave Msc hello Sbf 2 Zml 3 Sbi 4 Sge 5 Sgs 6 Ssb 7 Sus 8 Srz 9 Zhp 10 Zsq 11 Zsm 12 Zrg 
continue blah blah blah 
'의 값을 도출 한이었다

junk junk 
whatever and so on 
dbside=waffle waffle leave hello 2 3 4 5 6 7 8 9 10 11 12 
continue blah blah blah 

당신 move /y를 통해 임시 파일이든 당신의 원본 또는 copy /y 그 다음 임시 파일을 삭제하십시오. 귀하의 재량에 맡겨 둘 것입니다. 당연히 첫 번째 테스트.

@echo off은 으로 바뀌므로 각 줄 앞에 @을 붙일 필요가 없습니다.

대상 행의 문자 삭제시 대소 문자를 구분하지 않습니다.

+0

마지막 문장의 내용이 확실하지 않은 것으로 확신하지 않습니다. 독자는 일괄 검색과 대치가 대소 문자를 구별하지 않는다는 사실을 실제로 언급하고있을 때 임시 파일의 삭제에 대해 이야기하고 있다고 생각할 수 있습니다. 이것은 OP를위한 문제 일 수 있습니다. – dbenham

+0

누군가 다른 아이디어가 있다면 몇 가지 추가 노트를 추가했습니다. 대단히 감사하겠습니다. – Pyrometheous

0

INI 파일의 위치를 ​​지정하기 위해 귀하에게 맡기 겠습니다.

순수한 기본 배치를 사용하여 대/소문자 구분 검색 및 바꾸기를 수행하는 것은 상당히 어렵고 느립니다.

일반 표현식 검색을 수행하고 텍스트를 바꾸는 하이브리드 JScript/일괄 유틸리티 인 JREPL.BAT utility을 사용합니다. JREPL.BAT는 XP 이후의 모든 Windows 시스템에서 기본적으로 실행되는 순수한 스크립트입니다.

"dbside = line"By dbside=으로 시작하는 줄을 가정합니다. 이름 앞뒤에 공백이있을 수 있으므로 dbside = some value도 포함됩니다.

call jrepl "Djg|Msc|Sbf|Zml|Sbi|Sge|Sgs|Ssb|Sus|Srz|Zhp|Zsq|Zsm|Zrg" "" /jbegln "skip=($txt.search(/^\w*dbside\w*=/)!=0)" /f "%StyleDir%\Style.ini" /o - 

첫 번째 검색 및 바꾸기 인수는 간단합니다./JBEGLN 옵션은 행이 "dbside ="행이 아니면 검색/바꾸기를 생략하도록 유틸리티에 지시합니다./F 옵션은 원본 파일을 지정하고 - 값을 가진/O 옵션은 원본 파일을 결과로 덮어 쓰도록 JREPL에 지시합니다. 모든 검색은 대소 문자를 구분해야하는 경우

은 다음 변화는 작동합니다

call jrepl "Djg|Msc|Sbf|Zml|Sbi|Sge|Sgs|Ssb|Sus|Srz|Zhp|Zsq|Zsm|Zrg" "" /jbegln "skip=($txt.search(/^\w*dbside\w*=/i)!=0)" /i /f "%StyleDir%\Style.ini" /o - 

JREPL.BAT 내에 포함 된 전체 문서가 있습니다. JREPL /?