Jak pobrać ścieżkę folderu ze ścieżki pliku za pomocą CMD
Potrzebuję ścieżki do folderu zawierającego plik cmd. Z %0 mogę pobrać nazwę pliku. Ale jak uzyskać nazwę folderu?
C:\temp\test.cmd > > test.cmd
P. S. mój aktualny katalog != folder skryptu.
6 answers
Dla nazwy folderu i dysku można użyć:
echo %~dp0
Możesz uzyskać o wiele więcej informacji używając różnych modyfikatorów:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
%~sI - expanded path contains short names only
%~aI - expands %I to file attributes of file
%~tI - expands %I to date/time of file
%~zI - expands %I to size of file
The modifiers can be combined to get compound results:
%~dpI - expands %I to a drive letter and path only
%~nxI - expands %I to a file name and extension only
%~fsI - expands %I to a full path name with short names only
To jest Kopiuj Wklej z "dla /?"polecenie w wierszu polecenia. Mam nadzieję, że to pomoże.
Powiązane
Top 10 porad dos partii (tak, dos partii...) pokazuje batchparams.bat (link do źródła jako gist):
C:\Temp>batchparams.bat c:\windows\notepad.exe
%~1 = c:\windows\notepad.exe
%~f1 = c:\WINDOWS\NOTEPAD.EXE
%~d1 = c:
%~p1 = \WINDOWS\
%~n1 = NOTEPAD
%~x1 = .EXE
%~s1 = c:\WINDOWS\NOTEPAD.EXE
%~a1 = --a------
%~t1 = 08/25/2005 01:50 AM
%~z1 = 17920
%~$PATHATH:1 =
%~dp1 = c:\WINDOWS\
%~nx1 = NOTEPAD.EXE
%~dp$PATH:1 = c:\WINDOWS\
%~ftza1 = --a------ 08/25/2005 01:50 AM 17920 c:\WINDOWS\NOTEPAD.EXE
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-05 19:46:45
Przyjęta odpowiedź jest pomocna, ale nie jest od razu oczywiste, jak pobrać nazwę pliku ze ścieżki, jeśli nie używasz wartości przekazywanych. Udało mi się to rozwiązać z tego wątku, ale na wypadek, gdyby inni nie mieli tyle szczęścia, oto jak to się robi: {]}
@echo off
setlocal enabledelayedexpansion enableextensions
set myPath=C:\Somewhere\Somewhere\SomeFile.txt
call :file_name_from_path result !myPath!
echo %result%
goto :eof
:file_name_from_path <resultVar> <pathVar>
(
set "%~1=%~nx2"
exit /b
)
:eof
endlocal
Teraz funkcja :file_name_from_path
może być używana wszędzie do pobierania wartości, nie tylko dla przekazywanych w argumentach. Może to być bardzo pomocne, jeśli argumenty mogą być przekazywane do pliku w nieokreślonej kolejności lub ścieżka nie jest / align = "left" /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-08 16:48:34
Aby przypisać je do zmiennych, pamiętaj, aby nie dodawać spacji przed lub po znaku równości:
set filepath=%~dp1
set filename=%~nx1
Więc nie powinieneś mieć żadnych problemów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-26 22:38:38
Na wypadek, gdyby ktoś chciał alternatywną metodę...
Jeśli jest to ostatni podkatalog w ścieżce, możesz użyć tego jednego wiersza:
cd "c:\directory\subdirectory\filename.exe\..\.." && dir /ad /b /s
Zwróci to następujące:
c:\directory\subdirectory
The .... wraca do poprzedniego katalogu. / reklama pokazuje tylko katalogi / b jest notowaniem gołym formatem / s zawiera wszystkie podkatalogi. Jest to używane do uzyskania pełnej ścieżki katalogu do wydruku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-29 16:40:17
Miałem ten sam problem w pętli, gdzie chciałem wyodrębnić pliki zip w tym samym katalogu, a następnie usunąć plik zip. Problem polegał na tym, że 7z wymaga folderu wyjściowego, więc musiałem uzyskać ścieżkę folderu KAŻDEGO pliku. Oto moje rozwiązanie:
FOR /F "usebackq tokens=1" %%i IN (`DIR /S/B *.zip` ) DO (
7z.exe x %%i -aoa -o%%i\..
)
% % i była pełną ścieżką nazwy pliku i %ii\.. po prostu zwraca folder nadrzędny.
Mam nadzieję, że to pomoże.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-11 09:53:11
W przypadku, gdy zaakceptowana odpowiedź przez Wadih nie działa dla ciebie, spróbuj echo %CD%
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-04 00:59:33