2013-03-22 152 views
42

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

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

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

+2

的可能的复制[如何分割在批次完整路径的文件名?] (http://stackoverflow.com/questions/9252980/how-to-split-the-filename-from-a-full-path-in-batch) – iTayb 2015-11-15 18:52:02

回答

94
@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 
) 

真的知道你所说的没有“功能”

显然意味着什么,改变ECHOSET设置变量,而马拉松附和他们...

全额见http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx名单。

+2

这不适用于带有空格的文件路径 – meir 2015-11-11 06:54:50

+1

@meir - true ;我发布了一个更正。你在几年内学到很多东西。 – Magoo 2015-11-11 08:27:11

+0

@TrivisionZero:否,如果文件名或路径包含空格,则需要引号。 – Magoo 2016-03-06 01:52:32

85

只能从(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 

或同等,传递文件名作为本地FOR变量

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

,如果你想从实际运行的批处理文件的相关信息, 试试这个:

@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 = parameter 0 = batchfile %1 = parameter 1 - 1st par。传递给批处理文件...所以你可以尝试在第一个(例如“%”)和最后一个(例如“%”)之间的东西(例如“〜dp”)。“1”)也为参数

3

所有这一切都为我的作品:

@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 

输出:

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