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