Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 通读每一行,并使用批处理文件检查行是否以特定字符串开头_Batch File_Cmd - Fatal编程技术网

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

Batch file 通读每一行,并使用批处理文件检查行是否以特定字符串开头,batch-file,cmd,Batch File,Cmd,我正在尝试读取out.txt中的所有行,并检查该行是否以单词No开头。如果该行以No开头,我将在文件1.txt中回显yes,在文件2.txt中回显No 我正在使用以下代码: for /F "tokens=*" %%A in (out.txt) do ( IF "%%A:~0,2%"=="No" ( @echo yes >> 1.txt )else ( @echo no >> 2.txt ) ) 但这对我来说不管用。似乎if语句工作不正常。有人能告诉我代码是否有

我正在尝试读取out.txt中的所有行,并检查该行是否以单词No开头。如果该行以No开头,我将在文件1.txt中回显yes,在文件2.txt中回显No 我正在使用以下代码:

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

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

@echo yes >> 1.txt

)else (

@echo no >> 2.txt

)
)
但这对我来说不管用。似乎if语句工作不正常。有人能告诉我代码是否有问题吗?。我尝试回显%%A,并正在按预期读取这些行

不能对元变量进行子串

试一试

它在文件中查找/b以/L开头的任何一行,并输出找到的任何一行。>nul处理输出。如果找到字符串,errorlevel设置为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中的可执行映像。

有趣且简单,但它需要调用findstr.exe。我不能说我看到调用的速度比只在FOR命令中执行所有工作快。您可以在代码中去掉一个SET命令,只使用带有IF比较的子字符串。
@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