Jeśli chcesz katalog, w którym jesteś obecnie, że można dostać od %cd%
. To jest twój aktualny katalog roboczy.
Jeśli masz zamiar być zmieniając Twój bieżący katalog roboczy podczas wykonywania skryptu, wystarczy zapisać go na początku:
set startdir=%cd%
następnie można wykorzystać %startdir%
w kodzie, niezależnie od wszelkich zmianach później on (co wpływa na %cd%
).
Jeśli tylko chcesz dostać ostatnią składową tej ścieżce (jak na swoje komentarzu), można użyć następujących jako punkt odniesienia:
@setlocal enableextensions enabledelayedexpansion
@echo off
set startdir=%cd%
set temp=%startdir%
set folder=
:loop
if not "x%temp:~-1%"=="x\" (
set folder=!temp:~-1!!folder!
set temp=!temp:~0,-1!
goto :loop
)
echo.startdir = %startdir%
echo.folder = %folder%
endlocal && set folder=%folder%
This Wyjścia:
C:\Documents and Settings\Pax> testprog.cmd
startdir = C:\Documents and Settings\Pax
folder = Pax
Działa poprzez kopiowanie znaków od końca pełnej ścieżki, pojedynczo, aż znajdzie separator \
. To ani ładna, ani wydajne, ale programowanie partii Okna rzadko jest :-)
EDIT
Faktycznie, nie jest to prosta i bardzo skuteczna metoda, aby uzyskać nazwisko komponentu.
for %%F in ("%cd%") do set "folder=%~nxF"
nie problem dla tej sytuacji, ale jeśli masz do czynienia ze zmienną zawierającą ścieżkę, która może lub nie może zakończyć się \
, wtedy można zagwarantować prawidłowy wynik przez dołączenie \.
for %%F in ("%pathVar%\.") do set "folder=%~nxF"
@Berming, dodałem kod, który da ci ostatni składnik ścieżki. Zobacz aktualizację. – paxdiablo
Właśnie to, czego potrzebowałem, dziękuję bardzo. Zauważyłem jednak, że kiedy 'endlocal' nie mogę uzyskać dostępu do zmiennej' folder' po tym, więc wyjąłem tę linię. Pomyślałem, że odkąd usunąłem tę linię, powinienem również usunąć "@ setlocal enableextensions enabledelayedexpansion" na górze, ale usunięcie tej linii spowodowało problemy, więc zachowałem to. – Berming
@Berming, zobacz aktualizację. Jeśli opuścisz 'endlocal', wpłynie to na ciebie później.Możesz _still_ użyć 'setlocal/endlocal', aby upewnić się, że opóźnione rozszerzenie działa, ale zmodyfikuj' endlocal' na 'endlocal && set folder =% folder%', tak aby zmienna 'folder' została usunięta. – paxdiablo