Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Усечение строки до указаной подстроки

Ответить
Настройки темы
CMD/BAT - [решено] Усечение строки до указаной подстроки

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте!

Задача звучит примерно так: нужно из обрезать строку к указанной подстроке. Выглядит так:

Код: Выделить весь код
set apkName=SecSettings
set path=system/priv-app/SecSettings.apk=com.android.settings

call set path=%%path:%apkName%=&rem %%
echo %path%
Почему-то не работает. Ожидаемый результат - system/priv-app/, а выходит %%path:SecSettings=
В чём может быть проблема?

Отправлено: 17:48, 09-07-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


vogon_, во-первых, не используйте системные и пользовательские переменные в качестве рабочих:
Цитата vogon_:
Код: Выделить весь код
set path=system/priv-app/SecSettings.apk=com.android.settings
»
Во-вторых:
Цитата vogon_:
Ожидаемый результат - system/priv-app/, »
совершенно не ожидаемый. Ожидаемый:
Код: Выделить весь код
system/priv-app/&rem .apk=com.android.settings
Цитата vogon_:
В чём может быть проблема? »
В «&».

Опишите, что потребно получить. А не как.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:49, 09-07-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
set apkName=SecSettings
set path=system/priv-app/SecSettings.apk=com.android.settings

call set "path=%%path:%apkName%=&rem %%"
echo %path%
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:58, 09-07-2014 | #3


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Georgio, Красивая конструкция, но, Насколько я понял, обрезать строку не получилось, результат - обрезанная выдача искаженной исходной строки? Если сделать echo "%path%" можно это увидеть? Тогда непонятно: в чём задача?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 22:04, 09-07-2014 | #4


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, ответ на первое замечание - спасибо, учту на будущее

На второе - ожидаемый результат тот, который я указал, не иначе. По-крайней мере, я ожидал такой результат.

На третье - так ведь указано. Объясню подробнее (я неясно выразился, прошу прощения) - нужно в строке path откинуть все символы после подстроки apkName с этой подстрокой включительно.

Ответ на мой вопрос дал Georgio, поэтому всё решено

Georgio, спасибо, всё работает
Только в начале почему-то добавляется знак процента. А так всё супер! Благодарю)

megaloman, комментарием выше я написал, в чём задача (правда, она уже решена).
Спасибо за внимание, очень приятно, что так много отзывчивых людей! Удачи)

Отправлено: 23:13, 09-07-2014 | #5


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата vogon_:
Ответ на мой вопрос дал Georgio, поэтому всё решено
Georgio, спасибо, всё работает »
Отнюдь:
Код: Выделить весь код
set apkName=SecSettings
set path=system/priv-app/SecSettings.apk=com.android.settings

call set "path=%%path:%apkName%=&rem %%"
echo [%path%]
Цитата:
Код: Выделить весь код
E:\Песочница\0382>0007.cmd

E:\Песочница\0382>set apkName=SecSettings

E:\Песочница\0382>set path=system/priv-app/SecSettings.apk=com.android.settings

E:\Песочница\0382>call set "path=%path:SecSettings=&rem %"

E:\Песочница\0382>echo [system/priv-app/  & rem .apk=com.android.settings]
[system/priv-app/
Переменная окружения содержит всю строку «system/priv-app/&rem .apk=com.android.settings». В этом легко убедиться, хотя бы исполнив «set path». Просто командный процессор при выводе переменной окружения по «echo» рассматривает «&» как специальный символ.

Цитата vogon_:
нужно в строке path откинуть все символы после подстроки apkName с этой подстрокой включительно. »
Следует воспользоваться рецептом от коллеги gora:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sVar=bla-bla-bla-substring-bla-bla-bla
set sSubString=substring

set sLastPartVar=!sVar:*%sSubString%=!
set sResultVar=!sVar:%sLastPartVar%=!

echo [%sResultVar%]

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:53, 09-07-2014 | #6


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
set apkName=SecSettings
set path=system/priv-app/SecSettings.apk=com.android.settings

call set "path=%%path:%apkName%=&rem %%"
for /f "delims=" %%i in ('call echo %%path%%') do set path=%%i
echo %path%
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:23, 10-07-2014 | #7


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, но ведь у меня всё работает:

Код: Выделить весь код
C:\>set apkName=SecSettings

C:\>set path=system/priv-app/SecSettings.apk=com.android.settings

C:\>call set "path=%path:%apkName%=&rem %"

C:\>echo %path%
system/priv-app/
Это тот результат, который я ожидал и который мне очень нужен.
В чём проблема? Дело в том, что после "&rem " всё делается комментарием, в этом фишка такой команды) То есть при использовании переменной path та часть, которая после знака комментария, не будет учитываться.

Как бы там ни было, переменная имеет то значения, которое я хотел достать.
Спасибо за помощь)

Отправлено: 09:33, 10-07-2014 | #8


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата vogon_:
Как бы там ни было, переменная имеет то значения, которое я хотел достать. »
Нет, Вы не правы! Переменная как раз имеет другое значение, а именно то что приведено у Iska
Цитата Iska:
E:\Песочница\0382>echo [system/priv-app/ & rem .apk=com.android.settings]
[system/priv-app/ »
А строкой ниже приведена не переменная, а результат команды Echo с такой горе-переменной. Если она у Вас больше ни с какими командами не будет использоваться, то это полбеды, в противном случае содержимое переменной должно быть более легитимный и не должно использовать "фокусы" с & rem
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:09, 10-07-2014 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата vogon_:
Iska, но ведь у меня всё работает: »
Не верю:
Цитата:
Код: Выделить весь код
E:\Песочница\0382>0010.cmd

E:\Песочница\0382>set apkName=SecSettings

E:\Песочница\0382>set path=system/priv-app/SecSettings.apk=com.android.settings

E:\Песочница\0382>call set "path=%path:SecSettings=&rem %"

E:\Песочница\0382>echo [system/priv-app/  & rem .apk=com.android.settings]
[system/priv-app/

Покажите мне вывод того же кода, но с добавлением «[]» и «set path»:
Код: Выделить весь код
set apkName=SecSettings
set path=system/priv-app/SecSettings.apk=com.android.settings

call set "path=%%path:%apkName%=&rem %%"
echo [%path%]
set path
Цитата vogon_:
В чём проблема? Дело в том, что после "&rem " всё делается комментарием, в этом фишка такой команды) То есть при использовании переменной path та часть, которая после знака комментария, не будет учитываться. »
Проблема в том, что переменная окружения содержит совсем не то, что Вы видите. И эта, невидимая Вам, часть учитывается.

Georgio, код из #7 отрабатывает корректно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:17, 10-07-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Усечение строки до указаной подстроки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как повысить юзера до администратора из командной строки? suvolod Microsoft Windows NT/2000/2003 34 19-04-2016 07:21
CMD/BAT - [решено] CMD Разрезание строки на подстроки Acuna Скриптовые языки администрирования Windows 24 29-03-2014 22:59
VBS/WSH/JS - [решено] Поиск подстроки в файле с последующей заменой подстроки (многопользовательский досту) pogo Скриптовые языки администрирования Windows 12 06-12-2013 17:59
CMD/BAT - [решено] Копирование\перенос строк с 1.txt до определённой строки\секции в 2.txt. crimes Скриптовые языки администрирования Windows 7 11-06-2013 14:42
Создание подстроки в Word'e kop4enyi Хочу все знать 2 10-07-2008 12:55




 
Переход