gpt4 book ai didi

batch-file - 比较内部 FOR 循环

转载 作者:行者123 更新时间:2023-12-03 11:16:22 25 4
gpt4 key购买 nike

我正在尝试从文本文件中读取值/字符串列表(它们在字母和数字之间有所不同),如果输出文本文件中存在值/字符串,则不执行任何操作,否则将其附加到文本文件。

我花了 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

最佳答案

这是一种简单的方法,可以对文本数据进行排序,逐行读取文本,将每一行与前一行进行比较,只有在不匹配的情况下才返回当前行:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem // Reset buffer for previous line:
set "PREV="
rem // Write to output file:
> "12345-MAT.txt" (
rem // Read lines from input file:
for /F delims^=^ eol^= %%L in ('sort "12345-AREAS.txt"') do (
rem // Store current line:
set "LINE=%%L"
rem // Toggle delayed expansion to not lose `!`-signs:
setlocal EnableDelayedExpansion
rem // Compare current line with previous one:
if not "!LINE!"=="!PREV!" echo(!LINE!
endlocal
rem // Store line for next loop iteration:
set "PREV=%%L"
)
)

endlocal
exit /B

这种方式的好处是所有的字符都可能出现;缺点可能是性能一般。

关于batch-file - 比较内部 FOR 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55406174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com