[英]Modify a specific setting in an INI file on multiple PCs using Windows Batch
我的目标是使用外部 PC 列表通过网络在多台 PC 上修改 INI 文件中的单个设置,并将 output 结果写入日志文件。
PCList.txt
可以包含 1-100 个 PC 名称或 IP,每行一个。PCNAME: 'Success' or 'Fail'
到目前为止,我已经找到并修改了一个将在本地编辑文件的脚本,但无法让它与 FOR/DO 循环一起处理列表中每台 PC 的操作 - 或者 - 添加日志记录 output
@Echo Off
SetLocal EnableDelayedExpansion
Set _PathtoFile=C:\Test\Sample.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
以下是示例文件:Settings.ini
[SAMPLE SETTINGS]
SERVER=MYPC
Reboot=0
[SECTION2]
SETTINGX=1234
[SECTION3]
SETTINGX=4567
PCList.txt
MY-PC
YOUR_PC
NETSERVER
192.168.10.100
仍在尝试围绕该脚本正在执行的所有操作-这是技术答案中提供的唯一信息(初始脚本的来源)它通过使用 a.old 扩展名重命名来保留原始文件它将删除所有空白行, 但会在任何以 [ 开头的行之前插入一个空行(除非它是文件中的第一行)
如果文件中的旧行有尾随空格,我会得到指定搜索行的长度。
如果多行以旧行文本开头,它也会被更改。 例如,如果文件有这些行: test=line1 test=line1 并且您将 _OldLine 设置为 test=line1,则这两行都将被更改。
如果这可能是一个问题,
改变这一行:
如果 /I ":_tmp,~0,%_Len%!"=="%_OldLine%" (
对此:
如果 /I "!_tmp!"=="%_OldLine%" (
请记住,如果文件中的旧行有尾随空格,除非您将它们包含在 _OldLine 变量中,否则它不会被更改
在这一点上,我需要做的主要事情是使用上面的脚本来执行这个操作......或者类似的东西,在外部 TXT 文件中列出的 PC 列表上 - 通过网络。 我对替代方法持开放态度,只要它们是 windows 批处理脚本,并且不包括调用外部应用程序。
愿望清单, (目前不需要) :
[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 "\\%%I\C$\Test\Sample.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%\System32\findstr.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 文件,以确保除了文件顶部之外的部分上方始终有一个空行。
当前目录中有六个文件用于测试,第一个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
File4.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"
File2.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
因此,批处理文件可以很好地处理示例文件集。
首先检查是否完全找到要更新的文件,如果找不到文件,则将适当的信息附加到日志文件中。
该子例程取消定义下面代码中使用的接下来的三个环境变量。
我的回答详细解释了子例程UpateIniFile
中使用的FOR循环
如何逐行读取和打印文本文件的内容?
INI 文件 output 中的每一行由FINDSTR以行号和冒号开头,首先分配给环境变量Line
,延迟扩展未启用以防止包含感叹号时行损坏。
启用下一个延迟扩展,这会导致创建现有环境变量的副本。 有关命令SETLOCAL和ENDLOCAL的详细信息,请阅读此答案的下半部分。 理解这两个命令对理解其余代码的作用非常重要。
如果应该更新哪个值的条目已经在具有所需值的临时文件中,则第一个IF条件为真,因此文件中的所有剩余行都可以复制到临时文件中而无需任何进一步处理。 在这种情况下,从文件中读取的行是 output 删除了行号和FINDSTR添加到该行的冒号。
如果在当前行之前未找到批处理文件顶部定义的部分,则第二个IF条件为真。 在这种情况下,从文件中读取的行也是 output,带有行号和冒号,但是会进行额外的不区分大小写的字符串比较,以确定该行是否包含感兴趣的部分。 如果找到感兴趣的部分,则在进入子例程时定义的环境中使用值1
定义环境变量EntryUpdate
。
否则,当前行低于感兴趣的部分。
如果该行没有行号和冒号是不区分大小写的,等于要使用所需值更新的条目,则可以停止对行的处理,因为文件包含已具有所需值的条目。 命令GOTO用于退出FOR循环,继续批处理下面的批处理文件 label ValueExists
删除临时文件并在离开子程序之前将值已存在于当前文件中的信息写入日志文件。
如果感兴趣的部分中没有行号和冒号的行是空行,则在进入子例程时定义的先前环境中的环境变量EmptyLines
将增加 1。 值0
用于未定义的EmptyLines
,如命令SET的帮助所解释的那样。 感兴趣的部分是空行,在线上没有其他任何操作。
对于感兴趣的部分中的非空行,首先重新定义环境变量Line
,删除行号和冒号,以便进一步处理该行。
下一个条件将用双引号括起来的行的第一个和最后一个字符与字符串"[]"
进行比较,区分大小写,以确定该行是否是新节的开头。 如果此条件为真,则感兴趣的部分根本不包含该条目。 因此,具有所需值的条目现在是 output 和下一个可能在新部分之前找到的所有空行,而不是 output。 然后新部分的行是 output 并且在进入子例程时定义的环境中,环境变量EntryUpdate
被重新定义为字符串值3
并且环境变量CopyLines
被定义为文件中的所有其他行现在可以复制到临时文件中。
但如果当前行不是新的部分,则它是感兴趣部分中的非空行。 它可能是其条目的值不是所需值或不同条目的行。 因此首先所有的空行是 output 首先可能在感兴趣的部分的当前入口行之上。
下一个命令FOR用于拆分当前行并将左侧的字符串分配给循环变量J
到第一个等号(在行开头的零个或多个等号之后,希望没有 INI 文件包含曾经)。
如果感兴趣的部分中的当前行不区分大小写而不是应该更新哪个值的条目,则输入行只是 output。 否则,将找到要更新的条目行,因此该行是 output,在使用字符串值2
重新定义环境变量EntryUpdate
和定义环境变量CopyLines
以将所有其他行简单地复制到临时文件之前,具有条目名称和所需值。
FOR循环中处理INI文件行的所有output都被重定向到临时文件中。
可能是当前的 INI 文件根本不包含感兴趣的部分,可以在处理所有行后通过检查环境变量EntryUpdate
是否仍未定义来找到该部分。 在这种情况下,带有所需值的部分和条目被附加到临时文件中,忽略环境变量EmptyLines
以忽略 INI 文件底部的所有空行。
也有可能 INI 文件中的最后一个部分是感兴趣的部分,但是直到文件末尾都找不到具有要更新值的条目。 因此,使用另外一个IF条件来检查是否有必要在文件末尾 append 忽略文件末尾的所有空行,即具有所需值的入口行。
现在临时文件包含刚刚处理的 INI 文件在完成批处理文件执行后应包含的行。 因此,如果由于应用程序当前正在使用此 INI 文件打开临时文件,则如果临时文件不是只读的或受文件权限写保护或受文件访问权限写保护的,则将临时文件移动到 INI 文件目录并替换 INI 文件。
如果当前的 INI 文件不能被想要的修改替换,则删除临时文件,并将此错误情况记录在日志文件中。 否则,当前的 INI 文件将成功更新,并记录在日志文件中,其中包含批处理文件如何完成更新的信息。
现在应该清楚 Windows 命令处理器不是为文件内容修改而设计的,因为它是为运行命令和可执行文件而设计的。 有很多脚本解释器比cmd.exe
更适合这个任务。
要了解使用的命令及其工作原理,请打开命令提示符window,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
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 "\\%%I\Storeman\%Target%"
goto EndBatch
:UpateIniFile
set "EmptyLines="
set "EntryUpdate="
set "CopyLines="
(for /F delims^=^ eol^= %%I in ('%SystemRoot%\System32\findstr.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%\System32\findstr.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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.