批量从变量中提取路径和文件名

rsc*_*rin 73 path batch-file

如何从变量中提取路径和文件名?

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)

不是真的知道你所说的没有"功能"是什么意思

显然,改变ECHOSET设置变量,而马拉松附和他们...

有关完整列表,请参阅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)

评论:请看评论.

  • 这对于具有空格的文件路径不起作用 (3认同)

PA.*_*PA. 122

您只能从(1)BAT本身的参数%1,或(2)CALL的参数%1或(3)本地FOR变量中提取路径和文件名%%a.


HELP CALLHELP 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)