首页 文章

如何使用FOR在文件中查找字符串,去除空格,为它设置变量以进行标记?

提问于
浏览
0
@ECHO off
setlocal EnableDelayedExpansion
set "VAR=da da da YES123123"
echo %VAR% > testing.txt

FOR /F %%a in ('findstr "YES" .\testing.txt') do (
                                                 set BLAH=%%a
                                                 set "BLAH2=%BLAH: =%"
                                                 set "FINAL=%BLAH2:~15%"
                                                 echo %FINAL%
                                                 )

endlocal

无论是WITH还是WITHOUT“setlocal EnableDelayedExpansion”,批处理文件都无法正常工作 .

但到目前为止,这就是我所拥有的一切 . 但是,我还想从FINDSTR字符串中去除前面的字符,但是将变量设置为FINDSTR字符串AND IT'S SUCCEEDING 123123字符 . 不幸的是,它不起作用 . 它只输出“ECHO关闭” .

我在其他方面正确地使用了FOR,但这次我想不通 . 任何帮助将不胜感激 .

3 回答

  • 3

    要得到最后一个单词,请使用普通 for 来按默认分隔符(空格,制表符,逗号,=)拆分字符串 . 不需要知道,有多少令牌 . 以下工作,即使有更多行 YES

    for /f "delims=" %%a in ('findstr "YES" .\testing.txt') do (
      for %%b in (%%a) do set final=%%b
      echo !final!
    )
    

    EDIT 找到 YES 直到行尾:

    "all the rest"有一个令牌 * ,所以你可以这样做:

    for /f "tokens=3,* delims= " %%a in ('findstr "YES" .\testing.txt') do echo %%b
    

    但我推荐另一种方法(用 YES 替换 *YES ) . set 可以做有限的通配符替换( *string 有效,但 string* 没有) . 优点:您不需要知道哪个令牌 YES... 是:

    for /f "delims=" %%a in ('findstr "YES" testing.txt') do (
      set line=%%a
      echo !line:* YES=YES!
    )
    
  • 1

    理解第一个意思
    Tokens 表示只占用stdout的第1列或第2列或......

    skip 表示从标准输出列表中跳过第1,2行............

    delims 表示这些列彼此分隔的方式(空格或点或斜线..........)

  • 0

    好的,我明白了 . 不得不使用“令牌= 1,2,3,4,delim =”的东西,我讨厌使用它并且令人困惑,但之前已经将它用于其他目的 . 我真的很困惑如何在命令结束时回显或设置变量到令牌 . 这是更正后的代码 .

    FOR /F "tokens=1,2,3,4 delims= " %%a in ('findstr "YES" .\testing.txt') do echo %%d
    

相关问题