Как извлечь имя папки из пути, хранящегося в переменной с CMD? - PullRequest
2 голосов
/ 11 ноября 2011

В командном файле 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% (имя приложения),% 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%

Может ли кто-нибудь проявить себя с лучшим решением, которое не выглядит совершенно хакерским?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Нет другого способа сделать то, что тебе нужно.Единственное улучшение в вашем коде состоит в том, что несколько значений могут быть приняты в одном и том же 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%
0 голосов
/ 14 марта 2012
@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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...