如何使用批处理文件更改notes.ini文件中的参数

时间:2017-07-11 13:56:15

标签: batch-file

我有一个带有以下起始行的notes.ini文件:

[Notes]
Directory=c:\lotus\notes\data

我想将“Directory =”参数更改为Directory = D:\Users\fr21466\AppData\Roaming\notes

我正在尝试这段代码:

@echo off
set file=c:\lotus\notes\notes.ini
set newline=Directory=%appdata%\notes
set insertline=2
set output=%appdata%\notes\notes.ini
(for /f "tokens=1* delims=[]" %%a in ('find /n /v "##" ^< "%file%"') do (
    if "%%~a"=="%insertline%" (     
        echo %newline%    
        REM ECHO.%%b    
    ) ELSE (     
        echo.%%b     
    )    
)) > %output%

但输出文件正在生成:

它正在生成文件,但是切割符号:第一列中的“[”

Notes]
Directory=D:\Users\fr21466\AppData\Roaming\notes

有人可以帮我解决一下吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

尝试ini.bat(第二个,在更新部分下)。

copy "c:\lotus\notes\notes.ini" "%appdata%\notes"
ini.bat /s Notes /i Directory /v "%appdata%\notes" "%appdata%\notes\notes.ini"

要修复当前脚本,请尝试将find替换为findstrdelims=:。带/N的{​​{1}}选项以 nn:而不是 [nn] 为前缀,因此您的ini部分不会被破坏它们的周围括号被视为连续的分隔符。

findstr

答案 1 :(得分:0)

@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q45036613.txt"
SET "outfile=%destdir%\outfile.txt"
set file=%filename1%
set newline=Directory=%appdata%\notes
REM set insertline=2
set output=%outfile%
SET "notessection="
(FOR /f "delims=" %%x IN (%file%) DO (
  for /f "tokens=1* delims==" %%a in ("%%x") do (
   IF NOT DEFINED notessection ECHO(%%x
   IF DEFINED notessection (
    IF /i "%%a"=="Directory" (
     ECHO(%newline%
     SET "notessection="
    ) ELSE (
     ECHO(%%x
    )
   )
   IF /i "%%a"=="[Notes]" SET "notessection=Y"
  )
)) > %output%

GOTO :EOF

我使用了一个名为q45036613.txt的文件,其中包含您的数据+更多用于我的测试。我也调整了适合我系统的路径。

此版本不依赖于directory条目的位置;它查找[Notes]行,并使用directory解释变量的运行时值的特性来调整后面的if defined条目。因此,请等待[Notes],然后等待directory

答案 2 :(得分:0)

要解决此问题,请从第6行

中删除 [