我正在尝试从文本文件中读取值/字符串的列表(它们在字母和数字之间有所不同),如果输出文本文件中存在值/字符串,则不执行任何操作,否则将其追加到文本文件中。>
我花了3天多的时间进行研究并尝试各种事物和想法。 在我的搜索中,我遇到了与我需要做的事情非常相似的帖子(下面的链接),但是由于我是编程的新手,所以我没有人要寻求帮助,我希望你们能为我提供帮助。
Comparing Strings in Batch inside a for (if statement))
因此使用了与上面的帖子非常相似的内容,但是我不知道自己只是累了还是看不见我在哪里做错了事情。
@echo off
set ProjectNo=12345
set ProjectLocation=X:\Projects\123 ABC\45 WALL\G Drafting 12345\02 Models
set location=X:\Scripts
set areas=%location%\%ProjectNo%-AREAS.txt
set MAT=%location%\%ProjectNo%-MAT.txt
setlocal enableextensions enabledelayedexpansion
for /F %%a in ("%areas%") do (
set "MA=%%a"
setlocal EnableDelayedExpansion
echo(!MA!
pause
if exist "!MA!"=="!MA:%MA%=!" (
echo matched
> nul
) else (
echo nomatch
> %MAT%
)
endlocal
)
)
endlocal
pause
12345-AREAS.txt的内容如下(当前):
01
01
10
10
10
10
130
15
15
15
20
20
20
20
25
25
25
30
30
30
30
此列表的值可能在10-300之间(变化很大)
我打算在输出文件12345-MAT.txt中获得的是单个且唯一的值,如下所示:
01
10
130
15
20
25
30
答案 0 :(得分:3)
所以您追求的是独一无二的。
这是不需要延迟扩展的变体,
通过使用_[]
@echo off
set "ProjectNo=12345"
set "ProjectLocation=X:\Projects\123 ABC\45 WALL\G Drafting 12345\02 Models"
set "location=X:\Scripts"
set "areas=%location%\%ProjectNo%-AREAS.txt"
set "MAT=%location%\%ProjectNo%-MAT.txt"
Setlocal
:: clear env vars _[
for /f "delims=" %%A in ('set _[ 2^>Nul') Do set "%%A="
(for /f %%A in ('sort ^<"%areas%"') Do if not defined _[%%A] (
set "_[%%A]=1"
Echo:%%A
)
) > "%MAT%"
答案 1 :(得分:3)
这是一种简单的方法,可以对文本数据进行排序,逐行读取文本,将每行与上一行进行比较,仅在不匹配的情况下返回当前行:
auto *consoleWidget = new ConsoleWidget(this);
consoleWidget->logInfo("This is logging a message!");
此方法的优点是可以出现所有字符;缺点可能是性能不佳。