【问题标题】:Searching a text file and sending only numbers greater than a certain absolute value to text file?搜索文本文件并仅将大于某个绝对值的数字发送到文本文件?
【发布时间】: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


【解决方案1】:
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion

>new.txt (
  For /F "tokens=1,4" %%A in ('Findstr /b /r /c:"[^ ]*:S:" print.log') do (
    set "space=%%B"
    if "!space!"=="" (echo %%A ^*^*^*) else (echo %%A %%B)
  )
)

type new.txt
pause

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多