【发布时间】:2017-03-06 23:15:23
【问题描述】:
我有一个正在搜索的文本文件,如下所示:
ksdf 0 0 -4
as7d:S:asf 0 0 -4
kc:S:cd3 0 0 -2
asdk:S:s 0 0 6
lasd:S:dd 0 0
目前我的具体问题是在文件中搜索第一个和第四个令牌时。如果第 4 个令牌是一个数字,则一切正常,但是当第四个令牌为空白时(如我示例中的第 5 行),代码根本不起作用。你可以看到当它在%%B 变量中找到一个空白时,我想返回三个星号。
注意:感谢用户 LotPings,我正在使用 findstr 命令仅抓取以包含子字符串 :S: 的字符串开头的行,以澄清为什么存在。 (即我的示例中的第 1 行不会被抓取。)
我正在使用:
setlocal enabledelayedexpansion
For /F "tokens=1,4" %%A in ('Findstr /b /r /c:"[^ ]*:S:" print.log') do (
set space="%%B"
if !space!=="" echo %%A ^*^*^* >> new.txt
)
exit
【问题讨论】:
-
发布的代码对我来说很有效。
-
>>new.txt (if "%%B"=="" (echo %%A ^*^*^*) else (echo %%A %%B)) -
为什么要将 FOR 元变量分配给环境变量?
-
我不小心把“:S:”改成了别的东西,这是我的问题!无论如何,感谢您的朋友!
-
@Squashman 我最终将比较存储在
%%b中的值,方法是使用set space=!space:-=!删除负数,然后使用if !errorlevel!==0作为比较绝对值的开关(一个将负数加回的情况和一个将space值回显为正数的情况)到像if !space! GTR 3 echo %%a -!space! >>new.txt这样的静态数字(如果其为负数)。它还没有为我工作,但也许我错过了一些明显的东西,idk。
标签: batch-file for-loop cmd