Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Получение "короткого" значения переменной %CD%

Ответить
Настройки темы
CMD/BAT - [решено] Получение "короткого" значения переменной %CD%

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Borman44
Дата: 12-06-2016
По работе приходится пользоваться старыми 16-ти разрядными exe-шниками, но т.к. операционка x64, запускаю их через DosBox.
В пакетном режиме нужно DosBox'у передавать имя текущей папки.
Всё-бы ничего, но переменная %CD% содержит длинное имя текущей папки, а нужно передать короткое.
Сейчас вышел из положения тем, что вызываю батник сам из себя:
Код: Выделить весь код
IF -%1==- call %0 "%CD%\"
И далее переданное значение обрабатываю как %~sp1
А можно-ли непосредственно получить "короткое" значение переменной без рекурсивного вызова батника?

Отправлено: 12:56, 12-06-2016

 

Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off

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

pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:29, 12-06-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата 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 ещё проще .
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:36, 12-06-2016 | #3


Ветеран


Contributor


Сообщения: 2703
Благодарности: 1683

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 12-06-2016 в 16:18.


Отправлено: 16:04, 12-06-2016 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:18, 12-06-2016 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Получение "короткого" значения переменной %CD%

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интернет - "Получение IP адреса" и "выбивает" выбивает интернет andray Microsoft Windows 2000/XP 1 28-08-2013 17:10
CMD/BAT - [решено] Почему не работает получение части значения переменной в конструкции Echo.!Var:~0,1! Dragokas Скриптовые языки администрирования Windows 5 13-08-2013 09:22
Интерфейс - Пропали пункты в контекстном меню CD-привода: "стереть этот диск" и "форматировать" Vint 4esteR Microsoft Windows 7 5 31-05-2012 12:27
CMD/BAT - [решено] Как получить значение "вложенной" переменной. volk1234 Скриптовые языки администрирования Windows 4 03-10-2009 15:51
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") submaster Microsoft Windows NT/2000/2003 5 13-09-2006 12:29




 
Переход