Удалить символ «равно» из текстовой строки - PullRequest
0 голосов
/ 23 сентября 2010

Я запускаю поиск WMIC для ряда удаленных клиентских машин, получая Модель и серийный номер.

Для / F "tokens = *" %% b in ('wmic / node:% device% computersystem get Model / value ^ | find "Model"') do Установить модель = %% b

FOR / F "tokens = *" %% c in ('wmic / node:% device% bios GET серийный номер / значение ^ | find "SerialNumber ="') do set Serialnumber = %% c

У меня проблема в том, что (например)% serialnumber% установлено в: SerialNumber = CNU8424GP3

Мне не нужен 'Serialnumber =', я просто хочу сам серийный номер.

Единственный способ, который я нашел, это раздеться:

set SerialNumber =! Serialnumber: SerialNumber =!

но это оставляет знак равенства в начале строки. Итак, окончательный вывод = CNUBFZXXY, я хотел бы удалить ведущий =, а я не смог.

Есть предложения?

Ответы [ 5 ]

2 голосов
/ 07 апреля 2011

Либо разделите результат, используя оператор for с "delims==" (уже ответил), либо обрежьте до и включая знак равенства - ваш пример кода уже был очень близок:

set SerialNumber=!SerialNumber:SerialNumber=!
set SerialNumber=!SerialNumber:~1!
2 голосов
/ 23 сентября 2010

Добавьте delims== к вашим for заявлениям и измените tokens=* на tokens=1-2.Значения, которые вы хотите, будут во втором для переменных цикла:

For /F "delims== tokens=1-2" %%b in ('wmic /node:%device% computersystem get Model /value^|find "Model"') do set model=%%c
For /F "delims== tokens=1-2" %%c in ('wmic /node:%device% bios GET serialnumber /value^|find "SerialNumber=" ') do set Serialnumber=%%d
1 голос
/ 30 ноября 2010

Фрагмент ниже позволит вам удалить первый и последний символ. Я тут разыграл трюк и добавил соответствующий '=' в конце строки ( ПРИМЕЧАНИЕ: я мог бы использовать любой символ) . Я не смог найти способ добраться до последнего символа, поэтому хитрость заключается в том, чтобы просто добавить любой символ в конце переменной, а затем убрать его с 1, -1, что означает пропуск первого символа и отрицательного значение для правой стороны означает «обратный отсчет от правой».

set serialnumber=%serialnumber%=
set serialnumber=%serialnumber:1-1%

Надеюсь, это поможет людям, которые хотят взломать пакетные сценарии DOS в будущем. Хорошее краткое описание работы со строками можно найти здесь: DOS String Manipulation

0 голосов
/ 18 декабря 2017

Просто сделайте это вместо этого, это намного проще. ИСПОЛЬЗУЙТЕ ОЦЕНКИ В ОБЛАСТИ ОБМЕНА И СТРОКИ в операторе IF

ЕСЛИ "% VARIABLE%" == "equalsign = 123456" перейти к Z

: Z

SET VARIABLE =% VARIABLE: ~ 10%

эхо% VARIABLE%

Выходные данные должны быть 123456. Знак равенства отсутствует.

Это должно сделать это. Серьезно, это действительно заставляло меня сходить с ума, пытаясь понять это. Кто-то недавно помог мне с этим. Никогда не думал, что это будет так легко, лол.

0 голосов
/ 30 сентября 2010

Можно извлечь определенные символы из строковой переменной.

Переменная синтаксиса%: ~ num_chars_to_skip%% variable: ~ num_chars_to_skip, num_chars_to_keep%

Это может включать отрицательные числа:

  %variable:~num_chars_to_skip, -num_chars_to_skip%
  %variable:~-num_chars_to_skip,num_chars_to_keep%

Пример

 SET _test=012345
 SET _result=%_test:~1,6%
 ECHO %_result%          =12345
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...