Мне нужен путь к папке, содержащей файл cmd. С% 0 я могу получить имя файла. Но как получить имя папки?
c: \ temp \ test.cmd >> test.cmd
PS Моя текущая директория! = Папка скрипта.
Для имени папки и диска вы можете использовать:
echo %~dp0
Вы можете получить гораздо больше информации, используя различные модификаторы:
%~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
Это копия вставки из "для /?" Команда в командной строке. Надеюсь, поможет.
Топ 10 советов по DOS Batch (Да, DOS Batch ...) показывает batchparams.bat (ссылка на источник в виде сущности):
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
cd /d "%~dp0"
(из stackoverflow.com/questions/4451668 )Принятый ответ полезен, но не сразу очевидно, как извлечь имя файла из пути, если вы НЕ используете переданные значения. Я смог решить это из этой темы, но в случае, если другим не так повезло, вот как это делается:
Теперь
:file_name_from_path
функция может использоваться где угодно для получения значения, а не только для переданных в аргументах. Это может быть чрезвычайно полезно, если аргументы могут быть переданы в файл в неопределенном порядке или путь вообще не передан в файл.источник
%~dp1
для диска и пути."
s,!myPath!
если в вашем пути есть пробелы (или кавычки должны быть частью myPath)Чтобы назначить их переменным, не добавляйте пробелы перед или после знака равенства:
Тогда у вас не должно быть проблем.
источник
В случае, если кто-то хочет альтернативный метод ...
Если это последний подкаталог в пути, вы можете использовать этот однострочный:
Это вернет следующее:
.... возвращается к предыдущему каталогу. / ad показывает только каталоги / b - список в чистом формате / s включает все подкаталоги. Это используется для получения полного пути к каталогу для печати.
источник
У меня была та же проблема в моем цикле, когда я хотел извлечь ZIP-файлы в том же каталоге, а затем удалить ZIP-файл. Проблема заключалась в том, что 7z требует выходной папки, поэтому мне пришлось получить путь к папке каждого файла. Вот мое решение:
%% i был полным путем к имени файла, а% ii \ .. просто возвращает родительскую папку.
Надеюсь, поможет.
источник
Если принятый ответ Вадих не сработал, попробуйте
echo %CD%
источник
Это было сделано вместе с некоторым отредактированным примером cmd
источник