批处理脚本中变量中的转义字符
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.
我有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.