如何从CMD文件path获取文件夹path

我需要path到包含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 

这是来自“for /?”的复制粘贴 命令的提示。 希望它有帮助。

有关

前10个DOS批处理提示(是,DOS批处理…)显示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 

接受的答案是有帮助的,但如果不使用传入的值,如何从path中检索文件名是不明显的。 我能从这个线程中解决这个问题,但是如果其他人不那么幸运,那么这个是如何完成的:

 @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 

现在:file_name_from_path函数可以在任何地方使用来检索值,而不仅仅是传入参数。 如果参数可以以不确定的顺序传递到文件中,或者path根本不传递到文件中,这可能非常有用。

为了将这些分配给variables,请确保不要在前面或等号后面添加空格:

 set filepath=%~dp1 set filename=%~nx1 

那么你应该没有问题。

如果有人想要另一种方法…

如果它是path中的最后一个子目录,则可以使用以下单行命令:

 cd "c:\directory\subdirectory\filename.exe\..\.." && dir /ad /b /s 

这将返回以下内容:

 c:\directory\subdirectory 

….回落到以前的目录。 / ad仅显示目录/ b是裸格式列表/ s包含所有子目录。 这用于获取要打印的目录的完整path。

我在我的循环中有同样的问题,我想在相同的目录中提取zip文件,然后删除zip文件。 问题是7z需要输出文件夹,所以我不得不获得每个文件的文件夹path。 这是我的解决scheme:

 FOR /F "usebackq tokens=1" %%i IN (`DIR /S/B *.zip` ) DO ( 7z.exe x %%i -aoa -o%%i\.. ) 

%%我是一个完整的文件名path和%ii \ ..只是返回父文件夹。

希望它有帮助。