-1

我的文本文件包含以下几行:

;    
; TEST (C)kary global parameters file    
;    
;===================================================================   
; Test servers list    
;===================================================================    
TC_SERVER_NAME test123   
TC_SERVER_TITLE Tc_test    

我正在使用以下代码行来读取这些行并获取 TC_SERVER_NAME 行。

FOR /f tokens^=*^ eol^= %%C IN (%TEST_FILE%) do    
(    
    echo %%C | findstr /i "TC_SERVER_NAME" >nul:    
    if "%errorlevel%"=="0" (    
    echo %%C >> %OUTFILE%    
    )    
)

但是,执行此代码时出现以下错误。

“kary这个时候出乎意料”

但是,如果我从文本文件中删除 kary 之前的“)”,脚本执行得很好并且我得到了想要的结果。那么这里的“)”有什么问题。是否将“)”视为此处的某些命令?我该如何解决这个问题?

4

4 回答 4

2

您发布的代码和示例不对错误负责。
只有两个明显的错误,左括号必须与 the 位于同一行,FOR/F并且重定向到>nul:应该只有>nul.

它不输出任何内容,但不会导致错误消息。

if 语句不起作用,因为扩展%errorlevel%是在解析完整块时完成的,而不是在执行时完成的。

Foxidrives 解决方案应该可以解决这个问题。

或者你可以试试这个

findstr /i "TC_SERVER_NAME" %TEST_FILE% > %OUTFILE%
于 2013-07-29T09:32:33.523 回答
1

这有帮助吗?

FOR /f tokens^=*^ eol^= %%C IN (%TEST_FILE%) do (    
    echo %%C | findstr /i "TC_SERVER_NAME" >nul
    if "%errorlevel%"=="0" >> %OUTFILE% echo %%C
)    

你可能想要这个:

@echo off
set test_file=source.txt
set outfile=out.txt
FOR /f tokens^=*^ eol^= %%C IN (%TEST_FILE%) do (    
    echo %%C | findstr /i "TC_SERVER_NAME" >nul && >> %OUTFILE% echo %%C
)    
于 2013-07-29T08:53:11.963 回答
0

@jeb 最后一个解决方案更简单,最好,但是我想向您介绍&&,所以您的批次将是

FOR /f "tokens=* eol=" %%C IN (%TEST_FILE%) do echo %%C | findstr /i "TC_SERVER_NAME" >nul && echo %%C >> %OUTFILE%

但是,这是非常不安全的,因为文本可能包含(, <, &, |, ",>字符,这将修改命令行为。使用@jeb 解决方案,而不是FOR其他一切。更安全更快捷!

于 2013-07-29T10:08:02.830 回答
0

它与 enabledelayedexpanson 一起使用:(我“硬编码”了输入和输出文件以进行测试)

@echo off
setlocal enabledelayedexpansion

FOR /f "tokens=* eol=" %%C IN (t.t) do  (    
    echo %%C | findstr /i "TC_SERVER_NAME" >nul:    
    if "!errorlevel!"=="0" ( echo %%C >> o.o )  
)
于 2013-07-29T11:49:17.167 回答