首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >batch_循环文件中的行,并检查行是否以"#“开头

batch_循环文件中的行,并检查行是否以"#“开头
EN

Stack Overflow用户
提问于 2013-04-16 14:09:39
回答 3查看 1.5K关注 0票数 1

嗨,伙计,我有一个windows外壳的脚本.bat。我有这个文件:

代码语言:javascript
复制
line
line
#line
line
#line

我想逐行阅读文件,如果一行以"#“开头,我不做任何其他操作,我会做一些详细说明。如何做到这一点呢?我发布了伪代码

代码语言:javascript
复制
while (s=readline()!=null)
  {

  if(s.charat(0)!='#')
     do some elaboration
   }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-16 14:28:57

基于你的伪代码,这是你想要的吗?

代码语言:javascript
复制
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (file.txt) do (
    set line=%%i
    if !line:~0,1! equ # (
        ::Your code here:
    )
)

注意,您需要用要迭代的文件替换file.txt

票数 1
EN

Stack Overflow用户

发布于 2013-04-16 15:11:50

代码语言:javascript
复制
@ECHO OFF
SETLOCAL
:: first way - findstr
FOR /f "delims=" %%i IN (yourfile.txt) DO (
 ECHO %%i|FINDSTR /b "#" >NUL
 IF ERRORLEVEL 1 (ECHO non-#  : %%i) ELSE (ECHO #START : %%i)
)
ECHO ====== first way ===========
ENDLOCAL
SETLOCAL enabledelayedexpansion
:: second way - substring with delayedexpansion
FOR /f "delims=" %%i IN (yourfile.txt) DO (
 SET line=%%i
 if "!line:~0,1!"=="#" (ECHO #START : %%i) ELSE (ECHO non-#  : %%i)
)
ECHO ====== second way ===========
ENDLOCAL
SETLOCAL
:: third way -without delayedexpansion substringing and flagging in subroutine
FOR /f "delims=" %%i IN (yourfile.txt) DO (
 SET line=%%i
 CALL :test
 IF DEFINED line (ECHO non-#  : %%i) ELSE (ECHO #START : %%i)
)
ECHO ====== third way ===========
ENDLOCAL

GOTO :eof

:test
IF "%line:~0,1%"=="#" SET "line="
GOTO :eof

这里有三种方式-取决于进一步的细节。请注意,第三种方式使用IF DEFINEDIF ERRORLEVEL对变量的运行时值起作用的特性,而不是对解析时值起作用

票数 1
EN

Stack Overflow用户

发布于 2013-04-17 01:53:39

这是解决这个问题的最快方法:

代码语言:javascript
复制
for /F "eol=# delims=" %%a in (file.txt) do (
   echo Line that not start with #: %%a
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16029927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档