Мой ответ из другого поста, но и здесь он применим:
Есть альтернатива, которая проще. Вместо того, чтобы передавать значение, содержащее знак равенства, попробуйте что-то вроде двоеточия. Затем, благодаря возможности изменить это значение (двоеточие), вы можете преобразовать его обратно в равно. Вот пример:
@echo off
set VALUE1=%1
set VALUE2=%VALUE1::==%
echo value1 = %VALUE1%
echo value2 = %VALUE2%
Когда вы запускаете пакетный файл, вызывайте его так:
C:\>myBatch name:someValue
Вывод будет:
value1 = name:someValue
value2 = name=someValue
Если в имени или значении есть пробел, вам придется решать другие проблемы. Вам нужно будет обернуть всю строку в двойные кавычки. Но тогда у вас есть проблема необходимости избавиться от них. Это также может быть обработано, как это:
@echo off
cls
set PARAM=%1
set BASE=%PARAM:"=%
set PAIR=%BASE::==%
rem Either of these two lines will do the same thing - just notice the 'delims'
rem for /f "tokens=1,2 delims=:" %%a in ("%BASE%") do set NAME=%%a & set VALUE=%%b
rem for /f "tokens=1,2 delims==" %%a in ("%PAIR%") do set NAME=%%a & set VALUE=%%b
for /f "tokens=1,2 delims=:" %%a in ("%BASE%") do set NAME=%%a & set VALUE=%%b
echo param = %PARAM%
echo base = %BASE%
echo pair = %PAIR%
echo name = %NAME%
echo value = %VALUE%
При запуске этого командного файла вот так:
C:\>myBatch "some name:another value"
Вывод будет:
param = "some name:another value"
base = some name:another value
pair = some name=another value
name = some name
value = another value
Надеюсь, что это поможет другим в их стремлении выиграть бой с пакетными файлами.
Майк В.