批量从一个variables中提取path和文件名

我怎样才能从一个variables提取path和文件名?

Setlocal EnableDelayedExpansion set file=C:\Users\l72rugschiri\Desktop\fs.cfg 

我想这样做,而不使用任何function或任何GOTO。 可能吗?

 @ECHO OFF SETLOCAL set file=C:\Users\l72rugschiri\Desktop\fs.cfg FOR %%i IN ("%file%") DO ( ECHO filedrive=%%~di ECHO filepath=%%~pi ECHO filename=%%~ni ECHO fileextension=%%~xi ) 

不太确定你的意思是没有“function”

显然,将ECHO更改为SET来设置variables而不是ECHOing它们…

有关完整列表,请参阅http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx

您只能从(1)BAT本身的参数%1 ,或(2)CALL %1的参数或(3)本地FORvariables%%a提取path和文件名。


HELP CALLHELP FOR您可能会发现更详细的信息:

%〜1 – 展开%1删除任何周围的引号(“)
%〜f1 – 将%1展开为完全限定的path名​​称
%〜d1 – 仅将%1扩展为一个驱动器号
%〜p1 – 仅将%1扩展为path
%〜n1 – 仅将%1扩展为文件名
%〜x1 – 仅将%1扩展为文件扩展名
%〜s1 – 扩展path只包含短名称
%〜a1 – 将%1展开为文件属性
%〜t1 – 将%1扩展到文件的date/时间
%〜z1 – 将%1扩展为文件的大小


然后尝试以下操作:

将要parsing的string作为parameter passing给CALL

 call :setfile ..\Desktop\fs.cfg echo %file% = %filepath% + %filename% goto :eof :setfile set file=%~f1 set filepath=%~dp1 set filename=%~nx1 goto :eof 

或等价的,传递文件名作为本地FORvariables

 for %%a in (..\Desktop\fs.cfg) do ( set file=%%~fa set filepath=%%~dpa set filename=%%~nxa ) echo %file% = %filepath% + %filename% 

如果你想从实际运行的batch file中获取信息,试试这个:

 @echo off set myNameFull=%0 echo myNameFull %myNameFull% set myNameShort=%~n0 echo myNameShort %myNameShort% set myNameLong=%~nx0 echo myNameLong %myNameLong% set myPath=%~dp0 echo myPath %myPath% set myLogfileWpath=%myPath%%myNameShort%.log echo myLogfileWpath %myLogfileWpath% 

更多的样本? C:> HELP CALL

%0 =参数0 =batch file%1 =参数1 – 第一个参数。 传递给batch file…所以你可以尝试在第一个(例如“%”)和最后一个(例如“1”)之间的东西(例如“〜dp”)参数