转义批处理脚本中的变量中的字符

时间:2015-10-21 09:25:05

标签: variables batch-file escaping

我有我。变量如:

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.中收到错误。因此,该脚本似乎会从变量中删除!=

那么如何逃避变量中的!=

1 个答案:

答案 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