![]() |
Обрезать переменную до символа обратной косой черты
Здравствуйте!
Задача стоит следующая. Имеется переменная, которая хранит абсолютные и относительные пути к папкам и файлам. Нужно в ней обрезать всё до последней (если их >1) обратной косой черты включительно (т.е. оставить всё, что после). Если последним символом переменной является обратная косая черта, то её убрать и обрезать до предпоследней включительно. И результат запихнуть в новую переменную. Примеры: "C:\папка 1\папка 2" --> "папка 2" "C:\папка 1\папка 2\" --> "папка 2" "папка 2" --> "папка 2" "папка 2\" --> "папка 2" |
Код:
@echo off Код:
@echo off |
Iska, я попробовал первый вариант, работает, но только если в конце имеется обратная косая черта, иначе выводит пустое значение. Второй вариант работает вроде прекрасно. Немного переделал его под себя (добавил присвоение результата переменной). Получилось так:
Код:
@echo off |
Я бы посчитал удобным оформить это в виде подпрограммы
Код:
@Echo Off Примеры использования: Код:
Set DPath="C:\папка 1\папка 2\" Код:
@Echo Off |
megaloman, спасибо за решение, работает! Только один момент, значение получается в кавычках, можно ли вместо Set %~2="%%~nxf" написать Set "%~2=%%~nxf" , чтобы получилось без кавычек ? Так вроде как надо работает.
Вобщем, решения уже имеются, и если в варианте, предложенном Iska, никто не предложит оптимизацию (если она возможна, т.к. я за основу взял 2-ой вариант, и насколько я понял, его можно упростить до 1-го), то в любом случае помечу тему решённой. |
Steklopaket, чтобы получилось без кавычек надо сделать так:
Код:
:Restrict Код:
set "sFolder=C:\папка 1\папка 2" set "sFolder=C:\папка 1\папка 2" Зачем это нужно: Вы визуально не в состоянии контролировать, имеются ли сзади строкового значения лишние пробелы. Часто они приводят к ошибкам. |
megaloman, спасибо большое! Тема решена.
|
Цитата:
Скрытый текст
![]() Просто нужен правильный редактор :). |
Цитата:
я использую символ ^ в названиях папок. Каюсь (знак экрана в пакетниках), но законом ФС - не запрещено. Можно подправить Ваш алгоритм дабы удовлетворить синтаксис? (Мне не хватает опыта) И Второе: я сделал батник, который создает пару символьных ссылок(точек повторного анализа) в двух папках. Как бы "связывая" их, взаимными внутренними ссылками. Удобно для некоего реестра. Пользую MKLINK /D .. Использовал Ваш алгоритм "вычисления имени последней папки" коим и называются эти внутренние ссылки-папки. И тут проблема - ссылки тоже могут участвовать в связях. Хочу заменять путь таких символьных ссылок (встречающиеся в пути) до реального пути. Могу "нарисовать" для удобства понимания: реальные папки d:\1\ d:\2\ d:\3\ Так мой пакетник "связывает" две папки d:\1\ и d:\2\ символическими ссылками на них создается d:\1\2 ссылается на d:\2 создается d:\2\1 ссылается на d:\1 и еще хочу "связать" так (папку и уже ссылку) d:\1\2\3 ссылается на d:\3 d:\3\2 ссылается на d:\1\2 (это уже есть ссылка), а хотелось бы ВЫЧИСЛЯТЬ путь на "ее живую" папку, т.е. d:\2 т.е. еще нужен алгоритм преобразования пути с ссылками на путь лишь с реальными папками. На практике, в пути могут встречаться и не одна ссылка и "неугодные" строковые-bat-символы & % ^ !, разрешенные в именах папок. Про передачу параметров расскажу если надо. И там будет еще вопрос. |
Код:
@Echo Off |
Цитата:
Моя проблема была именно в ее вызове. Спасибо! Я долблю инет на предмет объяснения двойных символов процента вокруг переменной и не нахожу ответа. Именно они решают проблему символа экрана. Без второй пары (%%Var%%) - символ ^ удваивается. Если можно - объясните, плиз, как они работают. Вторую часть моего вопроса про разрешения пути символьной ссылки - выделить в отдельную тему? Я вчера покурил инет, и пока, кроме как парсить команду dir не вижу решения. Причем, опять, придется подсчитывать парные квадратные скобки, если таковые участвуют в именах папок пути. Для меня пока сложно составлять такие циклы. |
Время: 22:05. |
Время: 22:05.
© OSzone.net 2001-