PDA

Показать полную графическую версию : [решено] Получение "короткого" значения переменной %CD%


Borman44
12-06-2016, 12:56
По работе приходится пользоваться старыми 16-ти разрядными exe-шниками, но т.к. операционка x64, запускаю их через DosBox.
В пакетном режиме нужно DosBox'у передавать имя текущей папки.
Всё-бы ничего, но переменная %CD% содержит длинное имя текущей папки, а нужно передать короткое.
Сейчас вышел из положения тем, что вызываю батник сам из себя:

IF -%1==- call %0 "%CD%\"
И далее переданное значение обрабатываю как %~sp1
А можно-ли непосредственно получить "короткое" значение переменной без рекурсивного вызова батника?

Georgio
12-06-2016, 13:29
@echo off

for %%i in ("%CD%\") do set shortCD=%%~sdpi
echo %shortCD%

pause

Iska
12-06-2016, 13:36
А можно-ли непосредственно получить "короткое" значение переменной без рекурсивного вызова батника? »
Можно:
@echo off
setlocal enableextensions enabledelayedexpansion

echo "%cd%"
call :GetShortName "%cd%"
echo [%ShortName%]

endlocal
exit /b 0

:GetShortName
setlocal enableextensions enabledelayedexpansion
set sOut=%~0
set sResult=%~s1

endlocal & set %sOut:~4%=%sResult%
exit /b


Update: Хех. У коллеги Georgio ещё проще :).

megaloman
12-06-2016, 16:04
Borman44, Georgio, Iska, Не понимаю, почему нельзя
Echo %~dps0
Если пишем call %0 без путей, то батник, имхо, запускается из текущей папки. Исключение, если имя батника должно быть обнаружено по пути по умолчанию из переменной окружения.
Iska, @Echo Off
cls

cd /d "E:\Основная папка\"

Call :ShotPath "%CD%" "SPath"

Echo %SPath%

pause
GoTo :Eof

:ShotPath
Set %~2=%~dpnxs1

Iska
12-06-2016, 17:18
Borman44, Georgio, Iska, Не понимаю, почему нельзя
Echo %~dps0 »
Потому что текущий каталог текущего диска не есть путь к каталогу, где находится пакетный файл.




© OSzone.net 2001-2012