こんにちは、Windows シェル用のスクリプト .bat が必要です。私はこのファイルを持っています:
line
line
#line
line
#line
ファイルを1行ずつ読みたいのですが、行が「#」で始まる場合は、他に何もしません。どうすればこれを行うことができますか? 擬似コードを投稿します
while (s=readline()!=null)
{
if(s.charat(0)!='#')
do some elaboration
}
こんにちは、Windows シェル用のスクリプト .bat が必要です。私はこのファイルを持っています:
line
line
#line
line
#line
ファイルを1行ずつ読みたいのですが、行が「#」で始まる場合は、他に何もしません。どうすればこれを行うことができますか? 擬似コードを投稿します
while (s=readline()!=null)
{
if(s.charat(0)!='#')
do some elaboration
}
これは、この問題を解決する最速の方法です。
for /F "eol=# delims=" %%a in (file.txt) do (
echo Line that not start with #: %%a
)
@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
ここでの 3 つの方法 - 詳細によって異なります。3 番目の方法は、解析時の値ではなく、変数の RUN-TIME 値に作用IF DEFINED
する特性を使用することに注意してください。IF ERRORLEVEL
あなたの疑似コードに基づいて、これはあなたが望むものですか?
@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
繰り返したいファイルに置き換える必要があることに注意してください。