批量从一个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 CALL或HELP 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”)参数