В командном файле 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%
Может ли кто-нибудь проявить себя с лучшим решением, которое не выглядит совершенно хакерским?