2015-10-21 4 views
2

У меня есть i.a. переменные, такие как:escape-символы в переменных в пакетном скрипте

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.

EDIT:

, что я пытаюсь сделать 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

Смежные вопросы