bat 中的特殊符號輸出問題

2022-03-30 14:44:14 字數 1948 閱讀 7288

系統關鍵字(感嘆號!)衝突

由於是自動化部署,因此需要使用到迴圈,這裡就不可避免的用到了延遲變數(setlocal enabledelayedexpansion)

有關延遲變數的知識,大家可以通過這篇文章漲一漲

延遲變數帶來的乙個問題就是,文字中的感嘆號(!,xml檔案中的注釋)被替換掉了。

解決辦法就是,在給檔案中字串進行賦值前,使用endlocal禁用掉延遲變數。

bat讀取文字時,空行的判斷

空行有兩種型別,一種是不包括空格的換行,一種是包括空格的換行。

如果不判斷空行,在使用echo時,會輸出 echo處於關閉狀態。這時如果需要對讀取到的字串進行替換操作,也會報錯。

嘗試過echo.,但最後發現還是會延伸出來一些問題。因此需要對這兩種情況進行判斷。

不包括空行的判斷,在使用for迴圈讀取的時候,可以使用 if defined var判斷

包括空格的判斷,使用set var=!var: =!把空格替換掉,然後使用 if "!var!"==""進行判斷

以下為程式原始碼

bat執行程式

@echo  off

rem 迴圈查詢.temp格式的模板檔案並複製新檔案

for /r %%a in (*.temp) do

(

set f=%%a

setlocal enabledelayedexpansion

set nf=!f:.temp=!rem 替換前,刪除舊檔案

if exist !nf!(

del !nf!)

endlocal

rem 開始逐行替換舊檔案

for /f "

eol== delims=

" %%i in ('

findstr /i /n .* %%a

') do

(

set"

var=%%i

"rem 後面要用到變數,因此此處啟用延遲變數

setlocal enabledelayedexpansion

setvar=!var:*:=!rem 獲取需要生成的目標檔名

set nf=!f:.temp=!

set tmp=!var: =!rem 排除無空格空行

if defined var

( rem 排除包含空格的空行

if /i not "

!tmp!

"==""

(

(echo !var!)>>!nf!)

else

( echo.!var!>>!nf!)

) else

( echo.>>!nf!)

rem 此處禁用延遲變數,以使下一次迴圈時,能夠正常讀取字元

endlocal

)setlocal enabledelayedexpansion

set nf=!f:.temp=!echo 配置檔案!nf!設定成功

start !nf!pause

endlocal

)pause

exit

用於測試的模板檔案,命名為test.txt.temp

Bat 中特殊符號

隱藏命令的回顯。在for中表示使用增強的變數擴充套件 在set中表示使用擴充套件環境變數指定位置的字串 在set a中表示按位取反。使用兩個 包含乙個字串表示引用環境變數。比如乙個 time 可以擴充套件到當前的系統時間 單個 緊跟0 9的乙個數字表示引用命令列引數 用於for中表示引用迴圈變數 連...

BAT 特殊符號總結

原文 bat 特殊符號總結 bat特殊符號總結,用好特殊符號,利用提高開發效率。轉義符 用在特殊符號之前 比如 echo 非常 批處理 如果不加 那麼 批處理 將被當作命令執行 管道 傳遞符 當然是傳遞作用 比如 echo 0123456 find 123 將0123456 傳遞給find 查詢 1...

五筆中輸出特殊符號

如果要用五筆輸入法顯示特殊符號,可以先按zz,然後會提示一些特殊按鍵。如 zzjt 箭頭 zzbd 標點 zzsz 數字 zzzm 字母 zzpp 偏旁 zzdw 單位 zzpy 拼音 zzds 點號數字 zzks 括號數字 zzys 圓圈數字 zzzs 中文數字 zzhb 貨幣符號 zzjt 箭頭...