如何使用CMD从存储在变量中的路径中提取文件夹名称?

时间:2011-11-10 22:40:08

标签: batch-file cmd

在CMD批处理文件中,可以轻松提取参数的路径/文件夹名称:

set folder=%~f0
set dirname=%~p0

help callhelp for中对此进行了描述。 现在我如何对存储在变量中的路径做同样的事情? 以下不起作用:

set VAR="c:\Program Files (x86)\Java\jdk1.6.0_29\bin\java.exe"
echo %~pVAR%

我找到的替代方法是使用FOR或CALL:

for %%A in (%VAR%) do set P=%%~pA
for %%A in (%VAR%) do set N=%%~nA
for %%A in (%VAR%) do set E=%%~xA

然后根据需要使用%P%(c:\ path),%N%(appname),%E%(。exe)。

例如,我最近需要转换一个java.exe变量来映射到javaw.exe,所以我最终写了这个:

if %java_exe%=java (
    set javaw_exe=javaw
) else (
    for %%a in (%java_exe%) do set p=%%~pa
    for %%a in (%java_exe%) do set n=%%~na
    for %%a in (%java_exe%) do set x=%%~xa
    set n=%n:java=javaw%
    set javaw_exe=%p%%n%%x%
)
if not exist %javaw_exe% set javaw_exe=%java_exe%

有人可以使用一个看起来并不完全是hackish的更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

没有其他方法可以满足您的需求。代码中唯一的改进是可以在同一for中使用多个值,并消除一行:

if %java_exe%=java (
    set javaw_exe=javaw
) else (
    for %%a in (%java_exe%) do set p=%%~pa& set n=%%~na& set x=%%~xa
    set javaw_exe=%p%%n:java=javaw%%x%
)
if not exist %javaw_exe% set javaw_exe=%java_exe%

答案 1 :(得分:0)

@echo off

:: go the run dir
cd %~dp0
:: this is the dir containing the batch file
set MyDir=%CD%

for %%A in (%0) do set MyDriveLetter=%%~dA
for %%A in (%0) do set MyPath=%%~pA
for %%A in (%0) do set MyName=%%~nA
for %%A in (%0) do set MyExtension=%%~xA

ECHO MYNAME IS %0
echo MyDriveLetter is %MyDriveLetter%
echo MyPath is %MyPath%
echo MyName is %MyName%
echo MyExtension is %MyExtension%

PAUSE