如何从变量中提取路径和文件名?
Setlocal EnableDelayedExpansion
set file=C:\Users\l72rugschiri\Desktop\fs.cfg
Run Code Online (Sandbox Code Playgroud)
我想在不使用任何功能或任何GOTO的情况下这样做.可能吗?
Mag*_*goo 129
@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
)
Run Code Online (Sandbox Code Playgroud)
不是真的知道你所说的没有"功能"是什么意思
显然,改变ECHO以SET设置变量,而马拉松附和他们...
有关完整列表,请参阅for 文档.
ceztko的测试用例(供参考)
@ECHO OFF
SETLOCAL
set file="C:\Users\ l72rugschiri\Desktop\fs.cfg"
FOR /F "delims=" %%i IN ("%file%") DO (
ECHO filedrive=%%~di
ECHO filepath=%%~pi
ECHO filename=%%~ni
ECHO fileextension=%%~xi
)
Run Code Online (Sandbox Code Playgroud)
评论:请看评论.
PA.*_*PA. 122
您只能从(1)BAT本身的参数%1,或(2)CALL的参数%1或(3)本地FOR变量中提取路径和文件名%%a.
在HELP CALL或HELP FOR您可能会找到更详细的信息:
%~1 - 扩展%1删除任何周围的引号(")
%~f1 - 将%1扩展为完全限定的路径名
%~d1 - 将%1扩展为驱动器号
%%~p1 - 将%1扩展为仅路径
%~n1 - 仅将%1扩展为文件名
%~x1 - 仅将%1扩展为文件扩展名
%~s1 - 扩展路径仅包含短名称
%~a1 - 将%1扩展为文件属性
%~t1 - 扩展% 1到日期/文件的时间
%~z1 - 将%1扩展为文件大小
然后尝试以下方法:
将要解析的字符串作为参数传递给CALL
call :setfile ..\Desktop\fs.cfg
echo %file% = %filepath% + %filename%
goto :eof
:setfile
set file=%~f1
set filepath=%~dp1
set filename=%~nx1
goto :eof
Run Code Online (Sandbox Code Playgroud)
或等效的,将文件名作为本地FOR变量传递
for %%a in (..\Desktop\fs.cfg) do (
set file=%%~fa
set filepath=%%~dpa
set filename=%%~nxa
)
echo %file% = %filepath% + %filename%
Run Code Online (Sandbox Code Playgroud)
小智 13
所有这些对我有用:
@Echo Off
Echo Directory = %~dp0
Echo Object Name With Quotations=%0
Echo Object Name Without Quotes=%~0
Echo Bat File Drive = %~d0
Echo Full File Name = %~n0%~x0
Echo File Name Without Extension = %~n0
Echo File Extension = %~x0
Pause>Nul
Run Code Online (Sandbox Code Playgroud)
输出:
Directory = D:\Users\Thejordster135\Desktop\Code\BAT\
Object Name With Quotations="D:\Users\Thejordster135\Desktop\Code\BAT\Path_V2.bat"
Object Name Without Quotes=D:\Users\Thejordster135\Desktop\Code\BAT\Path_V2.bat
Bat File Drive = D:
Full File Name = Path.bat
File Name Without Extension = Path
File Extension = .bat
Run Code Online (Sandbox Code Playgroud)