%0
- это имя вашего командного файла. Вы можете использовать% ~ dp0 с pushd
, чтобы перейти в каталог, в котором находится ваш пакетный файл, и перейти к любому каталогу оттуда. Таким образом, общая структура такого пакетного файла:
@echo off
pushd %~dp0
rem batch file commands go here
popd
Что касается вашей проблемы с Visual Studio ... Переменные среды пользовательского режима доступны для каждого процесса, запущенного после установки переменной среды. Но по какой-то причине текущий процесс не получает его. Но Explorer.exe (который обрабатывает это меню «Пуск» и команду «Пуск», похоже, извлекает новую копию окружения каждый раз, когда это необходимо.
Процесс, запущенный таким образом, будет иметь новую среду, тогда как процесс, запущенный из командной строки, унаследует старую среду без новых переменных, установленных setx
.
Вы можете решить эту проблему, изменив пакетный файл на set
и setx
переменные.
Вот код, с которого можно начать. Это будет
- Показать текущий рабочий каталог
- Изменить каталог, в котором находится скрипт
- Установить переменную MYTEST в оболочке, в которой она запущена
- Установить переменную в среде пользователя
- Запустите Блокнот из оболочки, чтобы вы могли попробовать открыть файл с именем% MYTEST%
- Попробуйте с%, все работает
- Обратите внимание, как был изменен текущий каталог, кстати.
- Попросить запустить блокнот вручную из меню «Пуск»
Вот код, HTH
@echo off
::This is where we start
echo Current directory is %CD%
echo %0
::We change the current directory to where the script is running
pushd %~dp0
echo Current directory is %CD%
::if you want, you can move relatively from it
cd..
::Set an environement variable
set MYTEST=%~f0
::Make a copy avaiable to other processes
setx MYTEST "%MYTEST%"
::Now I should be able to fire notepad and open %%MYTEST%%
::(you can use the %% sign in the open box)
::Let's start a copy from this process
::
echo Starting notepad, open the file %%MYTEST%%, you should this
echo file thanks to the set statement.
notepad
echo Now launch Notepad from the start menu and open the file %%MYTEST%%,
echo you should this file thanks to the setx statement.
::Wherever you end up, restore the current directory
popd
echo Current directory is %CD%