Здравствуйте, wildwind, Вы писали:
W>Наверное я плохо объяснил. Пусть текущая папка C:\One\Two\Three\I-am-here. Мне нужно получить "Three".
Чисто на обработке строк, безо всяких экскурсов по файловой системе:
@echo off
:: на всякий случай, вдруг эти режимы выключены
setlocal enableextensions enabledelayedexpansion
set s=%cd%
echo fullpath='%s%'
:: разобъём строку на имена каталогов (по \), для этого нам нужно эскейпить настоящие пробелы
:: в качестве эскейпа используем $
:: 1) эскейпим собственно $ (заменяя его на $$)
set s=%s:$=$$%
:: 2) эскейпим пробелы (заменяя на $_)
set s=%s: =$_%
:: 3) наконец, разбиваем строку на токены
set s=%s:\= %
echo after preprocessing '%s%'
:: пробежимся по токенам
echo iterating...
for %%t in (%s%) do (
set parent=!last!
set last=%%t
echo parent='!parent!' last='!last!'
)
:: unescape - в обратном порядке
set parent=%parent:$_= %
set parent=%parent:$$=$%
echo.
echo the parent is '%parent%'
Пример работы
fullpath='C:\Documents and Settings\All Users\Start Menu\Dollars$and$ many spa_ces\Child'
after preprocessing 'C: Documents$_and$_Settings All$_Users Start$_Menu Dollars$$and$$$_many$_spa_ces Child'
iterating...
parent='' last='C:'
parent='C:' last='Documents$_and$_Settings'
parent='Documents$_and$_Settings' last='All$_Users'
parent='All$_Users' last='Start$_Menu'
parent='Start$_Menu' last='Dollars$$and$$$_many$_spa_ces'
parent='Dollars$$and$$$_many$_spa_ces' last='Child'
PARENT='Dollars$and$ many spa_ces'
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Перекуём баги на фичи!
Re[4]: [cmd] Получить имя родительской папки в переменную
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, wildwind, Вы писали:
К>Чисто на обработке строк, безо всяких экскурсов по файловой системе:
Спасибо! До такого варианта я не додумался, все изгалялся с for /f...
Сейчас вот подумываю, какой вариант выбрать окончательно: ваш, свой или вот такой, дешевый и сердитый:
@echo off
pushd ..
set s=%cd%
set s=%s:*\=%
set s=%s:*\=%
set s=%s:*\=%
set s=%s:*\=%
:: Повторить N раз... :)
popd
echo the parent is '%s%'
Re[5]: [cmd] Получить имя родительской папки в переменную