Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Получение "короткого" значения переменной %CD% (http://forum.oszone.net/showthread.php?t=315801)

Borman44 12-06-2016 12:56 2642354

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

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

Georgio 12-06-2016 13:29 2642363

Код:

@echo off

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

pause


Iska 12-06-2016 13:36 2642366

Цитата:

Цитата Borman44
А можно-ли непосредственно получить "короткое" значение переменной без рекурсивного вызова батника? »

Можно:
Скрытый текст
Код:

@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 2642391

Borman44, Georgio, Iska, Не понимаю, почему нельзя
Echo %~dps0
Если пишем call %0 без путей, то батник, имхо, запускается из текущей папки. Исключение, если имя батника должно быть обнаружено по пути по умолчанию из переменной окружения.
Iska,
А если всё таки с вызовом процедуры, если в батнике меняется текущая директория, то можно так (как вариант, у Georgio лучше):
Код:

@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 2642404

Цитата:

Цитата megaloman
Borman44, Georgio, Iska, Не понимаю, почему нельзя
Echo %~dps0 »

Потому что текущий каталог текущего диска не есть путь к каталогу, где находится пакетный файл.


Время: 16:57.

Время: 16:57.
© OSzone.net 2001-