在CMD批处理文件中,可以轻松提取参数的路径/文件夹名称:
set folder=%~f0
set dirname=%~p0
help call
和help 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的更好的解决方案吗?
答案 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