我需要包含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
接受的答案很有帮助,但如果您没有使用传入的值,如何从路径中检索文件名并不是很明显.我能够从这个线程中解决这个问题,但是如果其他人不那么幸运,这就是它的完成方式:
@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( set "%~1=%~nx2" exit /b ) :eof endlocal
现在,该:file_name_from_path
函数可以在任何地方用于检索值,而不仅仅是传入参数.如果参数可以以不确定的顺序传递到文件中,或者路径根本没有传递到文件中,这可能非常有用.
为了将这些分配给变量,请确保不要在前面或等号后面添加空格:
set filepath=%~dp1 set filename=%~nx1
那你应该没有问题.