ファイルを直接変更することはできません。目的のコンテンツで新しいファイルを作成し、元のファイルを新しいファイルに置き換える必要があります。
出力をリダイレクトし、目的のコンテンツを ECHO することによって、新しいファイルを作成します。ECHO(%%b
行が空白だったために %%b が空の場合に使用します。b が空の場合ECHO %%b
に生成されます。ECHO is off.
ほとんどの人は を使用しますECHO.
が、難解な状況では失敗する可能性があります。ECHO(
失敗することはありません。
MOVE を使用して、元のファイルを新しいファイルに置き換えます。
FINDSTR を FIND の後に使用して不要な行を除外することにより、FOR /F ループ内で番号を確認する必要がなくなります。
これまでに記述したコードでは、各行から先頭[
と文字が削除されることに注意してください。]
行フィルターは FOR 反復の前に適用されるため、DELIMS を]
only に設定することで状況をわずかに改善できます。
@ECHO OFF
SET /P LINENUMBER=Enter the Line No:
>tmp.txt.new (
FOR /F "tokens=1* delims=]" %%a IN (
'FIND /n /v "" ^<tmp.txt^|FINDSTR /VLB "[%LINENUMBER%]"'
) DO ECHO(%%b
)
>nul MOVE /y tmp.txt.new tmp.txt
元の行のいずれかがすでに で始まっている]
場合は、FIND の代わりに FINDSTR を使用して行番号を導入できます。nn:
の代わりに format を使用します[nn]
。この解決策は、あなたの行から先頭を取り除き:
ます。
@ECHO OFF
SET /P LINENUMBER=Enter the Line No:
>tmp.txt.new (
FOR /F "tokens=1* delims=:" %%a IN (
'FINDSTR /n "^" tmp.txt^|FINDSTR /VLB "%LINENUMBER%:"'
) DO ECHO(%%b
)
>nul MOVE /y tmp.txt.new tmp.txt
:
テキスト ファイルにとの両方で始まる行が含まれている場合、]
FOR /F を使用して行番号を解析することはできません。代わりに、検索と置換を使用します。ファイルに存在する可能性のあるものを保護するために、ループ内で遅延展開のオンとオフが切り替えられ!
ます。
@ECHO OFF
setlocal disableDelayedExpansion
SET /P LINENUMBER=Enter the Line No:
>tmp.txt.new (
FOR /F "delims=" %%a IN (
'FINDSTR /n "^" tmp.txt ^| FINDSTR /VLB "%LINENUMBER%:"'
) DO (
set "ln=%%a"
setlocal enableDelayedExpansion
echo(!ln:*:=!
endlocal
)
)
>nul MOVE /y tmp.txt.new tmp.txt