我有一个带有以下起始行的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
有人可以帮我解决一下吗?
谢谢!
答案 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
替换为findstr
和delims=:
。带/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行
中删除[