我有我。变量如:
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变量中转义这些字符呢。
编辑:
我正在努力做的事情:
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
我将这些变量用于其他变量之后:
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 :(得分:2)
你的逃跑似乎对我有用。您是否可以使用百分号%
作为构造变量?检查一下:
@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