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

escape characters in variables in a batch script

我有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 变量中转义这些字符。

编辑:

我正在努力做的事情:

SETLOCAL ENABLEDELAYEDEXPANSION
set CURRHOST=myServer
set CURRCOMPANY=myCompany
set CURRDBASE=string!string=string!string=string
set CURRSQLCMD="C:\Program Files (x86)\Microsoft SQL Server0\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. 中收到一个错误所以脚本似乎从变量中删除了 !=

那么如何转义变量中的!=呢?

你的转义似乎对我有用。可能是您对构造变量使用了百分号 % 吗?检查这个:

@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.