编辑:看来我在声明GOTO :EOF
的末尾有一个迷路ECHO
,它实际上会 GOTO :EOF ... d'oh!感谢您的回复。我认为这个错误现在被压扁了。
我有一个脚本,我想在其中滚动一个文本文档,比较文件是否匹配。
脚本在这里:
setlocal enabledelayedexpansion
for /f "tokens=1* delims=\" %%a in (NoMatchA.txt) DO (
set "flag="
for /f "tokens=1* delims=\" %%i in (NoMatchB.txt) do (
IF "%%b"=="%%j" SET flag=1
)
IF DEFINED flag ECHO FLAG DEFINED
IF NOT DEFINED flag ECHO FLAG NOT DEFINED
)
endlocal
组成输入NoMatchA.txt
和NoMatchB.txt
组成示例:
1234567890 \TEMP\ANIMALS\DOGS\FILE1.pdf
0987654321 \TEMP\TREES\I hate willows.docx
1122334455 \TEMP\LINUX ISOS\linustarvolds.iso
1029384756 \COVID\CANSUCk\MYBALLS\prettyflowers.jpg
1231509876 \USERS\HOMERSIMPSON\Doh.wav
1234567890 \TEMP\ANIMALS\DOGS\FILE1.pdf
0987654321 \TEMP\TREES\I hate willows.docx
1029383321 \COVID\CANSUCk\MYBALLS\prettyflowers.jpg
你得到图片。如果我回显,IF "%%b"=="%%j" SET flag=1
我可以清楚地看到它们是相等的,但flag
仍然显示为未定义。
所以基本上,如果文件名匹配,我想以某种方式处理该数据。
•| 编辑:这将防止剩余的行在设置后通过第二个
for
循环flag
,并且行标识已经出现。由于标志已经设置,循环不需要继续。
如果行数很少,则不会发生任何变化,但如果行数很多,这会对总时间过程产生很大影响。
添加 时
goto :skip
,您将立即退出第二个for
循环,避免对每一行进行重复处理,因为您已经找到了相同的字符串/行匹配。这是我更喜欢用一些不同的方法来处理的。
您通过删除一个变量开始第一个循环,从那里开始,它只会在某个值等于
"%%~b"
and时存在"%%~j"
。"%%~b"
在那之后,没有必要"%%~j"
在你的第二个循环中比较任何值。使用
if /i
and~
("%%~b
") 去除字符串中的双引号,并将循环中的两个变量与“双引号”进行比较如果我错了,不确定,但这对我有用,看看结果:
flag
:for
循环中删除变量flag
,在第二个循环中for
,您首先检查您的标志是否尚未定义,如果为真,则比较您的变量%%~b
,然后set
将您的flag
变量与值进行比较1
:Refer edit
在设置了它的变量标志后,因为%%~b == %%~j
,在第二次循环中不需要继续与文件的其余行进行比较,然后只需使用 agoto :label
立即退出循环并继续主循环。