您不能直接修改文件。您必須創建一個具有所需內容的新文件,然後用新文件替換原始文件。
您可以通過重定向輸出和ECHOing所需內容來創建新文件。在%% b爲空的情況下,我使用ECHO(%%b
,因爲該行爲空。如果b爲空,則ECHO %%b
將產生ECHO is off.
。大多數人使用ECHO.
,但在神祕的條件下可能會失敗。 ECHO(
永遠不會失敗。
您可以使用MOVE將新文件替換爲原始文件。
可以不再需要使用FINDSTR FIND後過濾掉不需要的行你FOR/F循環內檢查的數量。
請注意,到目前爲止,您的代碼將刪除每行的前導字符[
和]
。由於在FOR迭代之前應用了線路濾波器,因此只需將DELIMS設置爲]
即可稍微改善情況。
@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
如果您有任何原線路已經開始]
那麼你可以使用FINDSTR,而不是找引進的行號。這使用nn:
格式而不是[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
如果文本文件包含有:
和]
開始都那麼你可以不使用線/ 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
你嘗試寫的一切,但你要刪除的行? IF %% a NEQ%LINENUMBER% –
如果你有一個Windows版本的'sed',它很簡單:'sed「%LINENUMBER%d」file「。 –