Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/75: Рейтинг темы: голосов - 75, средняя оценка - 5.00
 Аватар для Abimeleh
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 85

Выделить из строки подстроку, следующую за последним разделителем

23.10.2015, 22:18. Показов 14733. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Задача по ходу несложная. И на другом языке пр я бы её
уже давно решил. Но мне необходимо именно в cmd в котором я слаб.
Необходимо выделить из сторки подстроку с конца.
Например:
https://www.asdfg/hjklz/xcvb/nmc/xxyy
необходимо получить xxyy.
Причем путь, его длина и сама подстрока которую необходимо получить могут быть
разными. В зависимости от того что введет пользователь.

Моя идея такова что нужно сделать в цикле обратный отсчет в котором склеивать
встретившиеся знаки до тех пор пока не встретится символ "/". Но не знаю как
сделать это в cmd.
Windows Batch file
1
2
3
4
5
6
7
8
@echo off
echo введите url файла
::пример https://www.asdfg/hjklz/xcvb/nmc/xxyy
set /p url="url: "
::some code
::some code
:: здесь %parametr% должен быть выделенная подстрока xxyy
start LNK_64.exe %parametr%
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.10.2015, 22:18
Ответы с готовыми решениями:

Строки. Вывести подстроку, расположенную между первым и последним пробелом исходной строки
Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и последним пробелом исходной...

Выделить подстроку строки
Что то призадумался.. Есть строка и надо взять ее кусок с индекса a по индекс b. Но в методе Substring такой реализации нет. ...

Строки. Выделить в подстроку все символы исходной строки, расположенные между первым и вторым двоеточием
Дана строка s, содержащая менее чем 200 символов. Получить подстроку символов, включающую все символы исходной строки, расположенные между...

10
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
23.10.2015, 23:10
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Цитата Сообщение от Abimeleh Посмотреть сообщение
необходимо получить xxyy.
Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
setlocal enabledelayedexpansion
 
set url=https://www.asdfg/hjklz/xcvb/nmc/xxyy
 
for /f "tokens=6 delims=/" %%a in ("%url%") do echo start LNK_64.exe %%a
 
pause
exit
Добавлено через 5 минут
Windows Batch file
1
2
3
4
5
6
7
8
9
10
@echo off
setlocal enabledelayedexpansion
 
set url=https://www.asdfg/hjklz/xcvb/nmc/xxyy
 
set url_1=%url:/=,% 
for %%a in (%url_1%) do set new=%%a
echo start LNK_64.exe %new%
pause
exit
1
 Аватар для Abimeleh
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 85
24.10.2015, 13:27  [ТС]
А зачем
Windows Batch file
do echo start LNK_64.exe %%a
если строка
Windows Batch file
start LNK_64.exe  %parametr%
Это запуск программы с ключем и это должно выполнится вне цикла.

Добавлено через 25 минут
Всё, убрал "echo", и запустилось... Так как я хотел. Большое спасибо !

Еще один нюанс относительно разделителей... Решение предложенное Sov44 работает, только когда заранее известно количество разделителей в строке, но оно может быть разным.
0
 Аватар для ComSpec
3463 / 2001 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
24.10.2015, 14:08
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Для обработки URL как строки в цикле с "FOR" можно использовать те же модификаторы, что и для обработки строки, являющейся путём файла:


Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off
 
echo Введите URL файла.
:: Пример: https://www.asdfg/hjklz/xcvb/nmc/xxyy
echo.
 
set /p URL="URL: "
 
for /f "delims=" %%i in ("%URL%") do set "file=%%~nxi"
 
if defined file start "" "LNK_64.exe" "%file%"
 
exit/b

.
1
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
24.10.2015, 14:23
Цитата Сообщение от Abimeleh
Необходимо выделить из сторки подстроку с конца.
Например:
https://www.asdfg/hjklz/xcvb/nmc/xxyyх
Способов на самом деле вагон:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
  setlocal enabledelayedexpansion
    rem Первый вариант
    set "s=https://www.asdfg/hjklz/xcvb/nmc/xxyy"
    set "i=0"
    for /l %%i in (1, 1, 255) do (
      set "c=!s:~%%i!"
      if defined c if "!c:~0,1!" equ "/" set /a "i+=1"
    )
    for /f "tokens=%i% delims=/" %%i in ("!s!") do echo:%%i
    rem Второй вариант
    for /f %%i in ("!s!") do echo:%%~ni
    rem Третий вариант
    powershell /noprofile /command "&{'!s!'.split('/')[-1]}"
    rem Четвертый вариант
    for %%i in ("%s:/=";"%") do set "last=%%i"
    echo:%last:~1,-1%
  endlocal
exit /b
И это далеко не все.
1
1781 / 763 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
24.10.2015, 17:30
Цитата Сообщение от Abimeleh Посмотреть сообщение
Решение предложенное Sov44 работает, только когда заранее известно количество разделителей.
решение во втором примере поста 2.
0
 Аватар для ComSpec
3463 / 2001 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
24.10.2015, 17:36
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Способ получения в качестве значения переменной последней подстроки при любых объявленных разделителях с использованием бесконечного цикла, выход из которого осуществляется сразу по окончании обработки строки:


Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
 
set "delims=/"
 
echo Введите URL файла.
:: Пример: https://www.asdfg/hjklz/xcvb/nmc/xxyy
echo.
 
set /p URL="URL: "
 
for /f "delims=" %%i in ('cmd/v/c "for /l %%i in () do @for /f tokens^=1*^ delims^=%delims% %%j in ("!URL!") do @if defined URL (set x=%%j& set URL=%%k) else (if defined x echo.!x!)& exit/b"') do set "file=%%i"
 
if defined file start "" "LNK_64.exe" "%file%"
 
exit/b

.



В случае, когда в качестве разделителей используются специальные символы (
пробел
табуляция
&
|
<
>
(
)
^
=
;
,
),
их нужно экранировать при задании переменной "delims" символом "^"
, например:
Windows Batch file
3
set "delims=^<^>"
.

Символ процента в качестве разделителя, как и положено для кода пакетного файла, необходимо удваивать.
3
 Аватар для Abimeleh
0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 85
24.10.2015, 18:23  [ТС]
Цитата Сообщение от sov44 Посмотреть сообщение
решение во втором примере поста 2
только что проверил, в данном примере если последняя подстрока переменной url содержит символ пробела, то %new% получает только символы начинающиеся с пробела, а не от первого разделителя (первого слэша с лева) . Хотя этот ваш пример как раз наиболее мне понятен из всех.. (Что касается разделителей, то и в самом деле их может быть разное количчество )

Может кто-нить подскажет есть ли какая - нибудь софтина для отладки bat файлов. Чтобы так сказать лучше понять все эти примеры
Я некоторое время тому назад искал, но так ничего и не нашел, кроме одной платной программы.

Добавлено через 31 минуту
ComSpec, ну вы ваще уже решили меня загрузить
0
24.10.2015, 18:54

Не по теме:

Цитата Сообщение от Abimeleh Посмотреть сообщение
софтина для отладки bat файлов
а надо?

десятки строк bat/cmd весьма часто заменяются одной-двумя строчками на языке C.
этот факт позволяет однозначно квалифицировать возню с ватниками как извращение;
а отладка извращений, как мне кажется, не самый весёлый способ истратить отпущенное
тебе time to live.

0
24.10.2015, 19:04  [ТС]

Не по теме:

Красиво сказано.. Ну чтож, и ладно. Извращение - так извращение.. :)

0
 Аватар для ComSpec
3463 / 2001 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
24.10.2015, 22:24
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Цитата Сообщение от Abimeleh Посмотреть сообщение
Цитата Сообщение от sov44 Посмотреть сообщение
решение во втором примере поста 2
только что проверил, в данном примере если последняя подстрока переменной url содержит символ пробела, то %new% получает только символы начинающиеся с пробела, а не от первого разделителя (первого слэша с лева) . Хотя этот ваш пример как раз наиболее мне понятен из всех.. (Что касается разделителей, то и в самом деле их может быть разное количчество )
.



Код:

Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
 
set "url=https://www.asdfg/hjklz/xcvb/nmc/xxyy"
 
for %%a in ("%url:/=","%") do set "new=%%~a"
 
start "" "LNK_64.exe" "%new%"
 
exit/b
.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.10.2015, 22:24
Помогаю со студенческими работами здесь

Строки. Из данной строки выделить подстроку символов, предшествующих первому пробелу. Определить, является ли она числом
Дана строка символов s1s2…sm, в которой могут встречаться цифры, пробелы, буква Е и знаки +, -. Известно, что первый символ s1 является...

Выделить подстроку с кавычками из строки QString
Как выделить подстроку из длинной строки QString, если в ней есть символы &lt; и &quot;&quot;. То есть, строка к примеру следующая...

выделить из строки наибольшую монотонную подстроку
помогите.очень нужно) написать программу-выделить из строки наибольшую монотонную подстроку(коды последовательных символов отличаются на...

Выделить подстроку из строки, использую char*
Нужно выделить подстроку из строки в массивах char*. например: char*ch = new char; ch = Hello world; //и дальше получить hello в...

Выделить из строки подстроку заключенную в скобки {}
Надо выделить подстроку заключенную в скобки {} из строки. Строка вводится с клавиатуры.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru