我有一個數據文件,它保存在以下格式(with | as delimiter)
數據庫連接信息處理特殊字符在外部數據文件中的FOR命令:在批處理文件
DatabaseServerIp1|UserName1|Password1|DatabaseName1
DatabaseServerIp2|UserName2|Password2|DatabaseName2
DatabaseServerIp3|UserName3|Password3|DatabaseName3
而且我有一個批處理文件,其讀取此文件的內容並使用該內容在此文件中的每個數據庫上執行腳本。這個腳本在大多數情況下效果很好,但當其中一個變量包含一個特殊字符如%
或@
時會遇到問題。
我在網上閱讀,我應該使用「SETLOCAL EnableDelayedExpansion
」,並用驚歎號包圍變量,但我無法得到它的工作。其他一些帖子也提到使用引號而不是感嘆號,但我無法讓這個工作。
我想避免更改DATA文件的內容(我不想在DATA文件中添加轉義字符)。
中,我想使用這個腳本:
rem ... more code here ...
FOR /F "eol== delims=| tokens=1,2,3,4" %%i IN (%DATABASEDATAFILE%) DO CALL :_ACTION %%i %%j %%k %%l
GOTO :_END
:_ACTION
IF "%1"=="" GOTO :EOF
SET IPSERVER=%1
SET USERNAME=%2
SET PASSWORD=%3
SET DATABASE=%4
sqlcmd -S%IPSERVER% -U%USERNAME% -P%PASSWORD% -d%DATABASE% -i%SCRIPTFILE% -o%RESULTFILE%
GOTO EOF
:_END
rem ... more code here ...
:EOF
如何使此代碼正確處理特殊字符?
示例:%
-密碼字段中的字符。
正如你可能已經猜到的,我不是這個批處理文件或數據文件的原始創建者。
+1這是一個很好的解決方案(一些錯別字固定) – foxidrive