我的文本文件包含以下行:
;
; 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之前的“)”,脚本执行正常,我得到了所需的结果。 那么这个“)”在这里有什么问题。是否将“)”视为某些命令?我该如何解决这个问题?
答案 0 :(得分:2)
您发布的代码和示例不对错误负责
只有两个明显的错误,左括号必须与FOR/F
位于同一行,而>nul:
的重定向应仅为>nul
。
它不输出任何内容,但不会导致错误消息。
if语句不起作用,因为%errorlevel%
的扩展在解析完整块时完成,而不是在执行时完成。
Foxidrives解决方案应该解决这个问题。
或者你可以试试这个
findstr /i "TC_SERVER_NAME" %TEST_FILE% > %OUTFILE%
答案 1 :(得分: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
)
答案 2 :(得分:0)
@jeb最后一个解决方案更简单,最好,但我想向您介绍&&
,所以您的批次将是
FOR /f "tokens=* eol=" %%C IN (%TEST_FILE%) do echo %%C | findstr /i "TC_SERVER_NAME" >nul && echo %%C >> %OUTFILE%
但是,这非常不安全,因为文字可能包含(
,<
,&
,|
,"
,>
个字符,这将修改命令行为。使用@jeb解决方案,而不是FOR
和其他所有内容。更安全,更快!
答案 3 :(得分: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 )
)