Я часто использую setlocal
в cmd.exe
, чтобы не загрязнять пространство переменных среды временными переменными (и чтобы гарантировать как расширения команд, так и
Однако я не понимаю, как это сделать, если я действительно хочу, чтобы одна из этих переменных была доступна.
Рассмотрим следующий код, который дает вам последний компонент текущий каталог (поэтому c: \ pax \ dir1
даст вам dir1
):
@echo off :main setlocal enableextensions enabledelayedexpansion call :func echo.main_folder = %folder% endlocal goto :eof :func setlocal enableextensions enabledelayedexpansion set temp=%cd% set folder= :funcloop1 if not "x%temp:~-1%"=="x\" ( set folder=!temp:~-1!!folder! set temp=!temp:~1,-1! goto :funcloop1 ) echo.func_folder = %folder% endlocal goto :eof
Когда я запустил это, я получаю вывод:
func_folder = dir1
main_folder =
, и вы можете видеть, что Переменная % folder%
не сохраняется в endlocal
. Однако, если я оставлю se tlocal / endlocal
из функции, переменная temp
загрязняет пространство имен main
.
Я знаю, что могу просто использовать set temp =
в конце func
, и это удалит переменную среды, но это не касается случая, когда я уже использую эта переменная во внешней области видимости (в этом случае она полностью уничтожается).
Есть ли способ в cmd.exe
, чтобы позволить выбранной группе переменных среды распространяться за пределы области видимости, при этом не позволяя другим влиять на нее? Другими словами, можно ли использовать как локальные, так и возвращаемые переменные?
Кроме того, пожалуйста, не говорите мне, что есть лучший способ получить последний компонент пути. Это только примерный случай.
На самом деле, вы можете указать мне лучший способ, так как было бы неплохо узнать, но он не будет отвечать на мой конкретный вопрос: -)