读取每一行并使用批处理文件检查行是否以特定字符串开头

时间:2018-03-22 01:26:25

标签: batch-file cmd

我正在尝试阅读out.txt中的所有行,并检查是否以单词No开头。如果该行以No开头,我回复yes以归档1.txt,否则no回复2.txt 我使用下面的代码:

for /F "tokens=*" %%A in (out.txt) do (

IF "%%A:~0,2%"=="No" (

@echo yes >> 1.txt

)else (

@echo no >> 2.txt

)
)

但它的尼克为我工作。似乎if语句不能正常工作。有人可以告诉我代码是否有问题?我试图回应%%A并按预期读取这些行。

2 个答案:

答案 0 :(得分:1)

您无法对元变量进行子串。

尝试

findstr /b /L "No"  out.txt >nul
if errorlevel 1 (
 echo not found
) else (
 echo found
)

在文件中找到/b以文字/L开始No并输出找到的任何行。 >nul处理输出。如果找到字符串,errorlevel设置为0,否则设置为非零。

答案 1 :(得分:0)

这更快:

@setlocal ENABLEEXTENSIONS
@set prompt=$G

@for /F "tokens=*" %%A in (out.txt) do @call :DoIt "%%A"
@exit /b 0

:DoIt
@set _line=%~1
@set _linePrefeix=%_line:~0,2%
@if "%_linePrefeix%" equ "No" (@echo yes >> 1.txt) else (@echo no >> 2.txt)
@exit /b 0

Magoo的解决方案和这个解决方案都需要两个进程,但是这个进程涉及一个已加载到内存中的可执行映像(cmd.exe)。