我的目标是使用外部PC列表在多台PC上通过网络修改INI文件中的单个设置,并将结果输出到日志文件中。
- 需要是一个窗口批处理文件。网络被锁定在正在运行的脚本(如 PS)之外。
- 安全性不是问题,因为在我的级别对所有目标 PC 的读写访问权限都是开放的。
- 要修改的INI文件的内容对于PC是唯一的,因此无法选择全面覆盖/复制。
- 在 INI 中删除或添加空白行不是问题。
- 文件
PCList.txt
可以包含 1-100 个 PC 名称或 IP,每行一个。 - 输出到带有
PCNAME: 'Success' or 'Fail'
的日志文件
到目前为止,我已经找到并修改了一个脚本,该脚本将在本地编辑文件,但无法使其与 FOR/DO 循环一起使用,以处理列表中每台 PC 的该操作 - OR - 添加日志记录输出
@Echo Off
SetLocal EnableDelayedExpansion
Set _PathtoFile=C:TestSample.ini
Set _OldLine=Reboot=
Set _NewLine=Reboot=1
Call :_Parse "%_PathtoFile%"
Set _Len=0
Set _Str=%_OldLine%
Set _Str=%_Str:"=.%987654321
:_Loop
If NOT "%_Str:~18%"=="" Set _Str=%_Str:~9%& Set /A _Len+=9& Goto _Loop
Set _Num=%_Str:~9,1%
Set /A _Len=_Len+_Num
PushD %_FilePath%
If Exist %_FileName%.new Del %_FileName%.new
If Exist %_FileName%.old Del %_FileName%.old
Set _LineNo=0
For /F "Tokens=* Eol=" %%I In (%_FileName%%_FileExt%) Do (
Set _tmp=%%I
Set /A _LineNo+=1
If /I "!_tmp:~0,%_Len%!"=="%_OldLine%" (
>>%_FileName%.new Echo %_NewLine%
) Else (
If !_LineNo! GTR 1 If "!_tmp:~0,1!"=="[" Echo.>>%_FileName%.new
SetLocal DisableDelayedExpansion
>>%_FileName%.new Echo %%I
EndLocal
))
Ren %_FileName%%_FileExt% %_FileName%.old
Ren %_FileName%.new %_FileName%.ini
PopD
Goto :EOF
:_Parse
Set _FilePath=%~dp1
Set _FileName=%~n1
Set _FileExt=%~x1
Goto :EOF
下面是示例文件:设置.ini
[SAMPLE SETTINGS]
SERVER=MYPC
Reboot=0
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567
个人电脑.txt
MY-PC
YOUR_PC
NETSERVER
192.168.10.100
仍然试图让我了解这个脚本正在做的一切 - 这是技术人员答案中提供的唯一信息(初始脚本的来源) 它通过使用.old扩展名重命名原始文件来保留原始文件 它将删除所有空白行,但会在任何以 [ 开头的行之前插入一个空行(除非它是文件中的第一行)
我得到指定搜索行的长度,以防文件中的旧行有尾随空格。
如果多行以旧行文本开头,则也会更改。例如,如果文件包含以下行:test=line1 test=line1,并且您将_OldLine设置为 test=line1,则两行都将更改。
如果这可能是一个问题,
请更改此行:
如果/I "!_tmp:~0,%_Len%!"=="%_OldLine%"(为此:
如果/I "!_tmp!"=="%_OldLine%"(
请记住,如果文件中的旧行有尾随空格,则除非将它们包含在 _OldLine 变量中,否则不会更改
此时我需要的主要事情是使用上面的脚本进行此操作......或类似的东西,在外部 TXT 文件中列出的 PC 列表中 - 通过网络。 我对替代方法持开放态度,前提是它们是 Windows 批处理脚本,并且不包括调用外部应用程序。
愿望清单(目前不需要):
- 能够在INI中指定或设置找到正在修改的设置的
[SECTION]
,在同一INI的多个部分中找到相同设置的一些可能性(不是我最初的需求,但我可以看到将来是这种情况)
任务的批处理文件代码
我建议使用以下代码:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SectionName=[SAMPLE SETTINGS]"
set "EntryName=Reboot"
set "EntryValue=1"
set "LogFile=%~dpn0.log"
set "TempFile=%TEMP%%~n0.tmp"
set "ListFile=%~dp0PCList.txt"
if not exist "%ListFile%" (
echo ERROR: List file %ListFile%" not found.>"%LogFile%"
goto EndBatch
)
del /A /F "%LogFile%" 2>nul
for /F "usebackq delims=" %%I in ("%ListFile%") do call :UpateIniFile "\%%IC$TestSample.ini"
goto EndBatch
:UpateIniFile
if not exist %1 (
echo File not found: %1>>"%LogFile%"
goto :EOF
)
set "EmptyLines="
set "EntryUpdate="
set "CopyLines="
(for /F delims^=^ eol^= %%I in ('%SystemRoot%System32findstr.exe /N "^" %1 2^>nul') do (
set "Line=%%I"
setlocal EnableDelayedExpansion
if defined CopyLines (
echo(!Line:*:=!
endlocal
) else if not defined EntryUpdate (
echo(!Line:*:=!
if /I "!Line:*:=!" == "!SectionName!" (
endlocal
set "EntryUpdate=1"
)
) else (
if /I "!Line:*:=!" == "!EntryName!=!EntryValue!" (
endlocal
goto ValueExists
)
if "!Line:*:=!" == "" (
endlocal
set /A EmptyLines+=1
) else (
set "Line=!Line:*:=!"
if "!Line:~0,1!!Line:~-1!" == "[]" (
echo !EntryName!=!EntryValue!
if defined EmptyLines for /L %%J in (1,1,!EmptyLines!) do echo(
echo !Line!
endlocal
set "EntryUpdate=3"
set "CopyLines=1"
) else (
if defined EmptyLines for /L %%L in (1,1,!EmptyLines!) do echo(
for /F delims^=^=^ eol^= %%J in ("!Line!") do (
if /I not "%%~J" == "!EntryName!" (
echo !Line!
endlocal
) else (
echo !EntryName!=!EntryValue!
endlocal
set "EntryUpdate=2"
set "CopyLines=1"
)
)
set "EmptyLines="
)
)
)
))>"%TempFile%"
if not defined EntryUpdate (
>>"%TempFile%" echo %SectionName%
>>"%TempFile%" echo %EntryName%=%EntryValue%
set EntryUpdate=4
)
if %EntryUpdate% == 1 (
>>"%TempFile%" echo %EntryName%=%EntryValue%
set "EntryUpdate=3"
)
move /Y "%TempFile%" %1 2>nul
if errorlevel 1 (
echo Failed to update: %1>>"%LogFile%"
del "%TempFile%"
goto :EOF
)
if %EntryUpdate% == 2 (
echo Value updated in: %1>>"%LogFile%"
goto :EOF
)
if %EntryUpdate% == 3 (
echo Entry added to: %1>>"%LogFile%"
goto :EOF
)
if %EntryUpdate% == 4 (
echo Section+entry to: %1>>"%LogFile%"
goto :EOF
)
:ValueExists
echo Value existed in: %1>>"%LogFile%"
del "%TempFile%"
goto :EOF
:EndBatch
endlocal
顶部定义的文件相关变量
日志文件在批处理文件的目录中创建,具有批处理文件名,但文件扩展名为.log
。
临时文件在本地计算机上的目录中创建,用于具有批处理文件名但文件扩展名为.tmp
的临时文件。
包含计算机名称或 IP 地址的列表文件必须PCList.txt
在批处理文件的目录中。
主代码说明
对于列表文件中不以;
开头的每一行,第一个FOR循环调用具有 INI 文件完整文件名的子例程,以使用适当的 UNC 路径进行更新。行首的分号可用于注释掉计算机名称或 IP 地址。
INI 文件更新例程的要求
编写子例程是为了满足以下要求:
如果子例程- 已包含要在正确部分中使用正确值更新的条目,则子例程不应修改该文件。如果文件内容根本没有真正修改,我不喜欢它设置存档属性并修改文件的上次修改日期。
- 它应替换正确部分中的条目值,以不同于批处理文件顶部定义的值。 如果该部分
- 已存在,但尚未包含该条目,则应将具有所需值的条目添加到该部分。该条目应添加到该节的最后一个非空行之后。
- 如果文件根本不包含该节,则应在文件末尾添加带有所需值的部分和条目。
编写子例程是为了保留文件中的所有空行,如果只有条目或节和条目必须追加在文件末尾,则文件末尾的空行除外。它不添加空行。可以增强它以另外重新格式化 INI 文件,确保除文件顶部之外的部分上方始终只有一个空行。
示例文件集
当前目录中有六个文件用于测试,在发布的批处理文件代码中使用以下命令行而不是命令行作为第一个FOR循环:
for %%I in (*.ini) do call :UpateIniFile "%%I"
File1.ini具有部分和条目,但值错误:
[SAMPLE SETTINGS]
SERVER=MYPC
Reboot=0
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567
File2.ini具有具有所需值的部分和条目:
[SAMPLE SETTINGS]
SERVER=MYPC
Reboot=1
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567
File3.ini将部分放在顶部,但不包含条目:
[SAMPLE SETTINGS]
SERVER=MYPC
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567
文件4.ini完全缺少该部分:
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567
File5.ini末尾有该部分,但不包含条目:
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567
[SAMPLE SETTINGS]
SERVER=MYPC
File6.ini与File1.ini类似,但为此文件设置了只读属性。
示例文件集的结果
批处理文件将写入此示例集的日志文件:
Value updated in: "File1.ini"
Value existed in: "File2.ini"
Entry added to: "File3.ini"
Section+entry to: "File4.ini"
Entry added to: "File5.ini"
Failed to update: "File6.ini"
文件 2.ini 和File6.ini根本不更新。
其他四个文件在批处理文件执行后具有以下行:
文件1.ini:
[SAMPLE SETTINGS]
SERVER=MYPC
Reboot=1
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567
文件3.ini:
[SAMPLE SETTINGS]
SERVER=MYPC
Reboot=1
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567
文件4.ini:
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567
[SAMPLE SETTINGS]
Reboot=1
文件5.ini:
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567
[SAMPLE SETTINGS]
SERVER=MYPC
Reboot=1
因此,批处理文件对于示例文件集做得很好。
INI 文件更新例程说明
首先检查是否找到要更新的文件,如果找不到该文件,则会将适当的信息附加到日志文件中。
子例程取消定义下面代码中使用的接下来三个环境变量。
子例程UpateIniFile
中使用的FOR循环在我的答案中进行了详细解释
如何逐行读取和打印文本文件的内容?
FINDSTR输出的 INI 文件中每行开头带有行号和冒号的行都首先分配给环境变量Line
未启用延迟扩展以防止包含感叹号的行损坏。
启用下一个延迟扩展,这将导致还创建现有环境变量的副本。请阅读本答案的下半部分,了解有关命令 SETLOCAL和ENDLOCAL的详细信息。了解这两个命令的作用对于理解代码的其余部分非常重要。
如果应更新的值的条目已在临时文件中具有所需值,则第一个 IF 条件为true,因此可以将文件中的所有剩余行复制到临时文件,而无需任何进一步处理。在这种情况下,输出从文件中读取的行,并删除FINDSTR添加到该行的行号和冒号。
如果找不到批处理文件顶部定义的部分到当前行,则第二个IF条件为 true。在这种情况下,从文件中读取的行也会输出行号和冒号,但会进行额外的不区分大小写的字符串比较,以确定此行是否包含感兴趣的部分。如果找到感兴趣的部分,则使用在进入子例程时定义的环境中的值1
定义环境变量EntryUpdate
。
否则,当前行位于感兴趣部分的下方。
如果此行不区分行号和冒号的大小写,则等于使用所需值更新的条目,则可以停止对这些行的处理,因为文件包含已具有所需值的条目。命令GOTO用于退出FOR循环,并在批处理标签下方继续批处理文件,ValueExists
在批处理标签下删除临时文件,并在离开子例程之前将信息写入日志文件,表明该值已存在于当前文件中。
如果感兴趣部分中没有行号和冒号的行是空行,则环境变量EmptyLines
在进入子例程时定义的先前环境中递增 1。值0
用于未定义EmptyLines
,如命令SET的帮助所解释的那样。在感兴趣的部分没有其他在线操作是空行。
对于感兴趣部分中的非空行,首先通过删除行号和冒号重新定义环境变量Line
,以便于进一步处理此行。
下一个条件将区分大小写的行中额外括在双引号中的字符的第一个和最后一个字符与字符串"[]"
进行比较,以确定此行是否是新部分的开头。如果此条件为 true,则感兴趣的部分根本不包含该条目。因此,现在输出具有所需值的条目,接下来可能是在新部分尚未输出之前找到的所有空行。然后输出带有新部分的行,并在进入子例程时定义的环境中,环境变量EntryUpdate
被重新定义为字符串值3
和环境变量CopyLines
定义为文件中的所有其他行现在可以复制到临时文件中。
但是,如果当前行不是新部分,则它是感兴趣部分中的非空行。它可以是带有该值的值不是所需值的条目的行,也可以是不同的条目。因此,首先输出所有空行,这些空行可能高于感兴趣部分中的当前输入行。
接下来,另一个命令FOR用于拆分当前行并分配给循环变量,J
字符串左为第一个等号(在行首的零个或多个等号之后,希望没有 INI 文件包含)。
如果感兴趣部分中的当前行不区分大小写,而不是应更新哪个值的条目,则仅输出输入行。否则,将找到要更新的条目行,因此在环境变量EntryUpdate
使用字符串值重新定义之前2
输出该行和所需的值,并定义环境变量CopyLines
以将所有其他行简单地复制到临时文件。
FOR循环内处理 INI 文件行的所有输出都将重定向到临时文件中。
可能是当前的INI文件根本不包含感兴趣的部分,可以通过检查环境变量EntryUpdate
是否仍未定义来处理所有行后找到。在这种情况下,具有所需值的部分和条目将附加到临时文件中,忽略环境变量EmptyLines
忽略 INI 文件底部的所有空行。
INI 文件中的最后一部分也可能是感兴趣的部分,但直到文件末尾都找不到具有要更新的值的条目。因此,另一个IF条件用于检查是否有必要在文件末尾附加,忽略文件末尾的所有空行具有所需值的条目行。
现在,临时文件包含刚刚处理的INI文件在完成批处理文件执行后应包含的行。因此,临时文件被移动到INI文件目录,如果它不是只读或受文件权限写保护或由文件访问权限写保护,因为它当前由使用此INI文件的应用程序打开。
如果当前 INI 文件无法替换为所需的修改,则会删除临时文件,并将此错误条件记录在日志文件中。否则,当前 INI 文件将成功更新,并记录在日志文件中,其中包含批处理文件如何完成更新的信息。
其他信息
现在应该很清楚,Windows 命令处理器不是为文件内容修改而设计的,因为它是为运行命令和可执行文件而设计的。有很多脚本解释器比cmd.exe
更适合此任务。
要了解使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,然后完整而仔细地阅读每个命令的显示帮助页面。
call /?
del /?
echo /?
endlocal /?
findstr /?
for /?
goto /?
if /?
move /?
set /?
setlocal /?
另请参阅: GOTO :EOF 返回何处?
我最终得到的:
@echo off
setlocal EnableExtensions Disabledelayedexpansion
set TODAY=%Date:~4,2%-%Date:~7,2%-%Date:~10,4%
set Target=SMSStart.ini
set SectionName=[Maintenance]
set EntryName=Reboot
set EntryValue=1
set LogFile=./INI_VAL_CHANGE_%TODAY%_Log.txt
set TempFile=%TEMP%%~n0.tmp
set ListFile=PCList.txt
if not exist "./%ListFile%" (
echo ERROR: List file %ListFile%" not found.>"%LogFile%"
goto EndBatch
)
XCOPY /Y %~dp0*_log.txt %~dp0%LOGS>nul
ERASE %~dp0*_log.txt /Q
Echo PC list: %ListFile%
Echo Run: %DATE%:%TIME%
Echo PC list: %ListFile%>>%LogFile%
Echo Run: %DATE%:%TIME%>>%LogFile%
Echo Target File: %Target%
Echo Target File: %Target%>>%LogFile%
Echo Search Key: %EntryName%= Update: "%EntryName%=%EntryValue%"
Echo Search Key: %EntryName%= Update: "%EntryName%=%EntryValue%">>%LogFile%
Echo =============================
Echo =============================>>%LogFile%
for /F "usebackq delims=" %%I in ("%ListFile%") do call :UpateIniFile "\%%IStoreman%Target%"
goto EndBatch
:UpateIniFile
set "EmptyLines="
set "EntryUpdate="
set "CopyLines="
(for /F delims^=^ eol^= %%I in ('%SystemRoot%System32findstr.exe /N "^" %1 2^>nul') do (
set "Line=%%I"
setlocal EnableDelayedExpansion
if defined CopyLines (
echo(!Line:*:=!
endlocal
) else if not defined EntryUpdate (
echo(!Line:*:=!
if /I "!Line:*:=!" == "!SectionName!" (
endlocal
set "EntryUpdate=1"
)
) else (
if /I "!Line:*:=!" == "!EntryName!=!EntryValue!" (
endlocal
goto ValueExists
)
if "!Line:*:=!" == "" (
endlocal
set /A EmptyLines+=1
) else (
set "Line=!Line:*:=!"
if "!Line:~0,1!!Line:~-1!" == "[]" (
echo !EntryName!=!EntryValue!
if defined EmptyLines for /L %%J in (1,1,!EmptyLines!) do echo(
echo !Line!
endlocal
set "EntryUpdate=3"
set "CopyLines=1"
) else (
if defined EmptyLines for /L %%L in (1,1,!EmptyLines!) do echo(
for /F delims^=^=^ eol^= %%J in ("!Line!") do (
if /I not "%%~J" == "!EntryName!" (
echo !Line!
endlocal
) else (
echo !EntryName!=!EntryValue!
endlocal
set "EntryUpdate=2"
set "CopyLines=1"
)
)
set "EmptyLines="
)
)
)
))>"%TempFile%"
if not defined EntryUpdate (
>>"%TempFile%" echo %SectionName%
>>"%TempFile%" echo %EntryName%=%EntryValue%
set EntryUpdate=4
)
if %EntryUpdate% == 1 (
>>"%TempFile%" echo %EntryName%=%EntryValue%
set "EntryUpdate=3"
)
move /Y "%TempFile%" %1 2>nul
if errorlevel 1 (
echo Failed to update: %1 : !time:~0,8!
echo Failed to update: %1 : !time:~0,8!>>"%LogFile%"
del "%TempFile%"
goto :EOF
)
if %EntryUpdate% == 2 (
echo !EntryName!=!EntryValue! updated in: %1 : !time:~0,8!
echo !EntryName!=!EntryValue! updated in: %1 : !time:~0,8!>>"%LogFile%"
goto :EOF
)
if %EntryUpdate% == 3 (
echo !EntryName!=!EntryValue! added to: %1 : !time:~0,8!
echo !EntryName!=!EntryValue! added to: %1 : !time:~0,8!>>"%LogFile%"
goto :EOF
)
if %EntryUpdate% == 4 (
echo Section+ !EntryName!=!EntryValue! to: %1 : !time:~0,8!
echo Section+ !EntryName!=!EntryValue! to: %1 : !time:~0,8!>>"%LogFile%"
goto :EOF
)
:ValueExists
echo !EntryName!=!EntryValue! existed in: %1 : !time:~0,8!
echo !EntryName!=!EntryValue! existed in: %1 : !time:~0,8!>>"%LogFile%"
del "%TempFile%"
goto :EOF
:EndBatch
endlocal
pause
@Mofi - 尝试根据您的建议支持代码:
move /Y "%TempFile%" %1 2>nul
if errorlevel 1 (
echo Failed to update: %1 : !time:~0,8!
echo Failed to update: %1 : !time:~0,8!>>"%LogFile%"
del "%TempFile%"
goto :EOF
试图弄清楚为什么当批处理无法到达网络上的 PC 并输出错误级别 1 时,脚本返回 !time:~0,8! 而不是实际时间戳?
这是我正在使用的当前版本:
@echo off
setlocal EnableExtensions Disabledelayedexpansion
set "TODAY=%Date:~4,2%-%Date:~7,2%-%Date:~10,4%"
set "Target=SMSStart.ini"
set "TarDIR=Storeman"
set "SectionName=[Maintenance]"
set "EntryName=Reboot"
set "EntryValue=1"
set "LogFile=.INI_VAL_CHANGE_%TODAY%_Log.txt"
set "TempFile=%TEMP%%~n0.tmp"
set "ListFile=PCList.txt"
if not exist ".%ListFile%" (
echo ERROR: List file %ListFile%" not found.>"%LogFile%"
goto EndBatch
)
XCOPY /Y "%~dp0*_log.txt" %~dp0%LOGS>nul
ERASE "%~dp0*_log.txt" /Q
Echo INI File Updater
Echo INI File Updater>>%LogFile%
Echo ==============================
Echo ==============================>>%LogFile%
Echo PC list: %ListFile%
Echo Run: %DATE%:%TIME%
Echo PC list: %ListFile%>>%LogFile%
Echo Run: %DATE%:%TIME%>>%LogFile%
Echo Target File: %Target%
Echo Target File: %Target%>>%LogFile%
Echo Target DIR: %TarDIR%
Echo Target DIR: %TarDIR%>>%LogFile%
Echo INI Section : %SectionName%
Echo INI Section : %SectionName%>>%LogFile%
Echo Search Key: %EntryName%= Update: "%EntryName%=%EntryValue%"
Echo Search Key: %EntryName%= Update: "%EntryName%=%EntryValue%">>%LogFile%
Echo ==============================
Echo.
Echo ==============================>>%LogFile%
Echo.>>%LogFile%
for /F "usebackq delims=" %%I in ("%ListFile%") do call :UpateIniFile "\%%I%TarDIR%%Target%"
goto EndBatch
:UpateIniFile
set "EmptyLines="
set "EntryUpdate="
set "CopyLines="
(for /F delims^=^ eol^= %%I in ('%SystemRoot%System32findstr.exe /N "^" %1 2^>nul') do (
set "Line=%%I"
setlocal EnableDelayedExpansion
if defined CopyLines (
echo(!Line:*:=!
endlocal
) else if not defined EntryUpdate (
echo(!Line:*:=!
if /I "!Line:*:=!" == "!SectionName!" (
endlocal
set "EntryUpdate=1"
)
) else (
if /I "!Line:*:=!" == "!EntryName!=!EntryValue!" (
endlocal
goto ValueExists
)
if "!Line:*:=!" == "" (
endlocal
set /A EmptyLines+=1
) else (
set "Line=!Line:*:=!"
if "!Line:~0,1!!Line:~-1!" == "[]" (
echo !EntryName!=!EntryValue!
if defined EmptyLines for /L %%J in (1,1,!EmptyLines!) do echo(
echo !Line!
endlocal
set "EntryUpdate=3"
set "CopyLines=1"
) else (
if defined EmptyLines for /L %%L in (1,1,!EmptyLines!) do echo(
for /F delims^=^=^ eol^= %%J in ("!Line!") do (
if /I not "%%~J" == "!EntryName!" (
echo !Line!
endlocal
) else (
echo !EntryName!=!EntryValue!
endlocal
set "EntryUpdate=2"
set "CopyLines=1"
)
)
set "EmptyLines="
)
)
)
))>"%TempFile%"
if not defined EntryUpdate (
>>"%TempFile%" echo %SectionName%
>>"%TempFile%" echo %EntryName%=%EntryValue%
set EntryUpdate=4
)
if %EntryUpdate% == 1 (
>>"%TempFile%" echo %EntryName%=%EntryValue%
set "EntryUpdate=3"
)
move /Y "%TempFile%" %1 2>nul
if errorlevel 1 (
echo Failed to update: %1 : !time:~0,8!
echo Failed to update: %1 : !time:~0,8!>>"%LogFile%"
del "%TempFile%"
goto :EOF
)
if %EntryUpdate% == 2 (
echo !EntryName!=!EntryValue! updated in: %1 : !time:~0,8!
echo !EntryName!=!EntryValue! updated in: %1 : !time:~0,8!>>"%LogFile%"
goto :EOF
)
if %EntryUpdate% == 3 (
echo !EntryName!=!EntryValue! added to: %1 : !time:~0,8!
echo !EntryName!=!EntryValue! added to: %1 : !time:~0,8!>>"%LogFile%"
goto :EOF
)
if %EntryUpdate% == 4 (
echo Section+ !EntryName!=!EntryValue! to: %1 : !time:~0,8!
echo Section+ !EntryName!=!EntryValue! to: %1 : !time:~0,8!>>"%LogFile%"
goto :EOF
)
:ValueExists
echo !EntryName!=!EntryValue! existed in: %1 : !time:~0,8!
echo !EntryName!=!EntryValue! existed in: %1 : !time:~0,8!>>"%LogFile%"
del "%TempFile%"
goto :EOF
:EndBatch
Echo.
Echo.>>%LogFile%
Echo ---COMPLETE---
Echo ---COMPLETE--->>"%LogFile%"
Echo.
endlocal
pause