2015-10-21 45 views
2

我有i.a.變量,如:批處理腳本中的變量轉義字符

SET CURRHOST=myServer 
SET CURRCOMPANY=myCompany 
SET CURRDB=string!string=string!string=string 

後我設置此變量:

SET NAME=%CURRHOST%\%CURRCOMPANY%\%CURRDB% 

我還使用上述其它變量的變量。但現在我的問題是,腳本認爲我的CURRDB變量是一個命令。

我試圖逃跑變量像

SETLOCAL ENABLEDELAYEDEXPANSION 
SET CURRDB=string^^!string^^=string^^!string^^=string 

,然後在其他變量使用這個變量與

!CURRDB! 

但它不工作。它也消除了!字符和=字符之間的字符串。

那麼如何在CURRDB變量中轉義這個字符。

編輯:

什麼,我想exaktly做:

SETLOCAL ENABLEDELAYEDEXPANSION 
set CURRHOST=myServer 
set CURRCOMPANY=myCompany 
set CURRDBASE=string!string=string!string=string 
set CURRSQLCMD="C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn" 
set CURRFILETREE=E:\SWF_DBankBackup\MSSQL2012 

後,我用這些變量obove其他變量:

set DateiName=%CURRHOST%_%CURRDBASE%_BackupCurrent 
set Backuppath=%CURRFILETREE%\%CURRCOMPANY%\%CURRDBASE% 
set BackupSkript=%Backuppath%\BackupCurrentScript\%DateiName%_Full_Script.sql 
set BackupBAKpath=%Backuppath%\Current 
set BackupTXTpath=%Backuppath%\Current\txt 

但問題是變量CURRDB。腳本將它作爲命令處理,因爲它們是人物!和=在字符串中。所以我得到一個錯誤,在cmd 'testtest' is not recognized as an internal or external command, operable programm or batch file.所以它看起來像腳本從變量中刪除!=

那麼我該如何逃避變量中的!=

+0

不要在'SET'命令周圍使用空格。使用'SET CURRDB = string ...',否則你得到的變量名的空間類似'CURRDB ' – jeb

+0

刪除'='周圍的空格;否則它將成爲變量名稱和字符串值的一部分... – aschipfl

+0

我的腳本中沒有空格。我只是在這裏用它來表現奇特。 –

回答

1

你的逃避似乎在我的工作。難道你使用百分號%作爲構造變量嗎?檢查:

@ECHO OFF 
SETLOCAL EnableDelayedExpansion 
SET CURRHOST=myServer 
SET CURRCOMPANY=myCompany 
SET CURRDB=string^^!string=string^^!string=string 

ECHO correct: %CURRHOST%\%CURRCOMPANY%\!CURRDB! 
ECHO broken : %CURRHOST%\%CURRCOMPANY%\%CURRDB% 

SET NAME=%CURRHOST%\%CURRCOMPANY%\!CURRDB! 

ECHO correct: !NAME! 
ECHO broken : %NAME% 

輸出:

correct: myServer\myCompany\string!string=string!string=string 
broken : myServer\myCompany\stringstring=string 
correct: myServer\myCompany\string!string=string!string=string 
broken : myServer\myCompany\stringstring=string 

的斷絃正是你所描述的不當行爲相匹配。

延遲擴展不是很容易讓你頭腦發熱,官方文檔大多是壞的。 I'd recommend reading on SS64, here's their page on delayed expansion

+0

嘗試過但它不工作,我在我的帖子中添加了一個詳細的示例.. –

+0

@EmreBeloz:你運行了上面的腳本,它產生了不同的輸出嗎?我看着你的編輯 - 你確實使用了百分號'%'。正如你從上面的腳本中看到的那樣,你需要使用感嘆號'!'。 – zb226

+0

@EmreBeloz:我已經擴展了上面的例子,以更清楚地顯示你正在見證的問題。 – zb226