文件內容
# 測試標題
Show # 12131212 change[title] == "run time" # [test] == "true"
Hide # 54899849 change[title] == "run time" # [test] == "true"
需求內容
[title] == "run time" # [test] == "true"
// # change[title] == "run time" # [test] == "true"
條件:
@echo off
REM UTF-8
chcp 65001
rem 定義變數延遲環境,關閉回顯
@echo off&setlocal enabledelayedexpansion
rem 讀取a.txt所有內容
for /f "eol=* tokens=*" %%i in (1.filter) do (
rem 設定變數a為每行內容
set a=%%i
rem 如果該行有Hide,則將其改為//
set "a=!a:Hide=//!"
rem 把修改後的全部行存入$
echo !a!>>$)
rem 用$的內容替換原來a.txt內容
move $ 1.filter
chcp 65001
bat、txt的編碼格式:utf8 沒有BOM的
for /f
不會讀取空行
for /f eol值
先以delims 的值去切割
如果第一段的第一個字,和 eol值一樣,就跳過這一行
eol值的預設值是分號(;)
%%i 的值
模糊取代
只有當*是第一字時,才可以模糊取代(非貪婪)
%var:*Old=New%
至於Show*change 這種形式,就要另外想辦法了
@echo off
REM UTF-8
chcp 65001
rem 第一段第一個字為# 則略過這一行
for /f "eol=# delims=" %%i in (1.filter) do (
rem 設定變數a為每行內容
set "a=%%i"
rem 定義變數延遲環境
setlocal enabledelayedexpansion
rem 如果該行有Hide,則將其改為//
set "a=!a:Hide=//!"
rem 一行的前4個字是Show。模糊取代 Show*change 為空
rem 另一種寫法:更多檢查 set "a=!a:* change[=[!"
if "!a:~0,4!" == "Show" set "a=!a:*change=!"
rem 把修改後的全部行存入$
echo !a!>>$
endlocal
)
rem 用$的內容替換原來txt內容
move $ 1.filter