我有一个名为 Test.OPT
的文本文件,其中包含以下内容:
REPORTLOG +"E:\LicenseLogs\cstd.rl"
GROUPCASEINSENSITIVE ON
GROUP TEST_USERS user1 user2
INCLUDE feature1 TEST_USERS
INCLUDE feature2 TEST_USERS
INCLUDE Solver_feature3 TEST_USERS
INCLUDE Solver_feature4 TEST_USERS
INCLUDE Solver_feature5 TEST_USERS
INCLUDE Solver_feature6 TEST_USERS
INCLUDE Solver_feature7 TEST_USERS
我想追加到上面文本文件中包含 GROUP TEST_USERS
字符串 User3
的行的末尾 .
我有一个批处理文件,它不能按预期工作:
@echo off
setlocal EnableDelayedExpansion
set search=%1
set "textfile=D:\testing\Test.OPT"
set "newfile=D:\testing\TestTemp.OPT"
(for /f "delims=" %%i in (%textfile%) do (
set "line=%%i"
findStr /B /c:"GROUP TEST_USERS" %%i>nul && (
set line=%%i %search%
) || (
set "line=%%i"
)
echo(!line!
endlocal
))>"%newfile%"
我可以在Java中轻松完成这项工作,但由于某种原因,我不得不使用批处理脚本执行此操作 .
1 回答
我建议为此任务执行以下代码:
第一个 IF 条件将区分大小写的行与所有出现的
GROUP TEST_USERS
替换为不区分大小写的空字符串与当前行 . 如果两个比较的字符串不相等,则当前行包含GROUP TEST_USERS
.在包含
GROUP TEST_USERS
的行上,为该行分配了一个到环境变量UserCheck
的尾随空格 .第二个 IF 类似于第一个 IF ,以查明该行是否已包含已作为第一个参数传递给批处理文件的用户 . 用户仅附加到尚未包含此用户的在线行 .
最后,对当前文件和新文件执行二进制文件比较 . 仅当两个文件不是二进制相等时,才会将新文件移动到原始文件上 . 否则,新文件二进制文件等于原始文件只是被删除 . 因此,原始文件的最后修改日期仅在文件内容真正更改时才会更改 .
请注意,此批处理代码不适用于包含空行,带有一个或多个感叹号的行或以分号开头的行的文本文件 .
要了解使用的命令及其工作方式,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面 .
del /?
echo /?
endlocal /?
fc /?
for /?
if /?
move /?
set /?
setlocal /?