使用批處理呼叫 reg add 命令修改登錄檔的時候,經常會遇到特殊情況:需要寫入登錄檔數值包含百分號、雙引號等特殊字元。特別要注意的是,在cmd視窗直接執行命令和bat指令碼裡面需要兩種不同的轉義方法。
1、百分號的轉義
待寫入的登錄檔數值為 %username%
1.1 cmd視窗直接執行命令(使用一對雙引號)
reg add "hkey_current_user\software" /v "bathome" /t reg_sz /d %"username"% /f
1.2 bat指令碼(使用兩個百分號)
@echo offreg add "hkey_current_user\software" /v "bathome" /t reg_sz /d %%username%% /f
2、雙引號的轉義待寫入的登錄檔數值為 "%1" %*
2.1 cmd視窗直接執行命令(使用反斜線)
reg add "hkey_current_user\software" /v "bathome" /t reg_sz /d "\"%1\" %*" /f
2.2 bat指令碼(使用多對雙引號)
@echo offreg add "hkey_current_user\software" /v "bathome" /t reg_sz /d """"%%1""" %%*" /f
3、括號的特殊處理在bat指令碼中使用for命令寫入登錄檔時,如果數值包含括號,需要特殊處理,否則會導致**出錯。
假設bat指令碼的完整路徑為:
c:\program files (x86)\potplayersetup\potplayermini.bat
待寫入的登錄檔數值為:
"c:\program files (x86)\potplayersetup\potplayermini.exe,0"
【方法1】啟用變數延遲擴充套件
@echo offsetlocal enabledelayedexpansionfor %%a in (*** mp4) do ( set "regdata=%~dp0%~n0.exe,0" reg add "hkey_classes_root\%~n0.%%a\defaulticon" /ve /t reg_sz /d """"!regdata!"""" /f)
【方法2】借助 call 命令把 reg add 命令挪到 for 迴圈之外
@echo offfor %%a in (*** mp4) do ( call :execreg "%%a" "%~dp0%~n0.exe,0")goto :eof:execregreg add "hkey_classes_root\%~n0.%~1\defaulticon" /ve /t reg_sz /d """%2""" /fgoto :eof
【如果覺得有用,"喜歡作者"】 Shell中變數的單百分號 和雙百分號 的作用
使用百分號將變數的內容從變數的後面刪除,並從變數的尾部刪除。不同的是,乙個 號表示從尾部最近的匹配刪除,兩個 從尾部最遠的匹配刪除。同時支援使用萬用字元。比如 先宣告乙個變數 filename aaabbccddaabbccdd使用乙個百分號擷取尾部bb echo 結果 aaabbccddaa可以看...
(乾貨)DB2中關於百分號 的轉義處理問題
乾貨 db2中關於百分號 的轉義處理問題 網上有很多關於db2轉義字元的說明,不過都不是拿來就可以用的。周圍的同時遇到 這個問題了,然後去網上查了以後,還是解決不了,我很納悶。於是我也去搜了一下,果 然,網上的說法基本上都是這種 select from table where name like e...
python裡的百分號 python中的百分號
常見的兩種 第一種 數值運算 1 3 是指模運算,取餘數 remainder 7 2 20 coding utf 8 python讀取檔案,偶數行輸出乙個檔案,奇數行輸出乙個檔案 def fenhang infile,outfile,outfile1 infopen open infile,r en...