2013-03-22 77 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