Один из способов, который я могу придумать, - это использовать другие переменные окружения для хранения частичных путей;например, если у вас есть
C:\this_is_a\long_path\that_appears\in_multiple_places\subdir1;
C:\this_is_a\long_path\that_appears\in_multiple_places\subdir2;
, вы можете создать новую переменную среды, такую как
SET P1=C:\this_is_a\long_path\that_appears\in_multiple_places
, после чего ваши исходные пути станут
%P1%\subdir1;
%P1%\subdir2;
РЕДАКТИРОВАТЬ: Другой вариант заключается в создании каталога bin
, который содержит .bat
файлов, которые указывают на соответствующие .exe
файлы.
РЕДАКТИРОВАТЬ 2: Бен Voigt'sВ комментарии к другому ответу упоминается, что использование других переменных среды, как предлагается, может не уменьшить длину %PATH%
, поскольку они будут расширены перед сохранением.Это может быть правдой, и я не проверял это.Другой вариант - использовать формы 8dot3 для более длинных имен каталогов, например, C:\Program Files
обычно эквивалентно C:\PROGRA~1
.Вы можете использовать dir /x
, чтобы увидеть более короткие имена.
РЕДАКТИРОВАТЬ 3: Этот простой тест заставляет меня поверить, что Бен Фойгт прав.
set test1=hello
set test2=%test1%hello
set test1=bye
echo %test2%
НаВ конце этого вы увидите вывод hellohello
, а не byehello
.
РЕДАКТИРОВАТЬ 4: В случае, если вы решите использовать пакетные файлы для исключения определенных путей из %PATH%
, вы можетезаботиться о том, как передать аргументы из вашего пакетного файла в ваш исполняемый файл, чтобы процесс был прозрачным (то есть вы не заметите никакой разницы между вызовом пакетного файла и вызовом исполняемого файла).У меня нет большого опыта написания командных файлов, но это, кажется, работает нормально.
@echo off
rem This batch file points to an executable of the same name
rem that is located in another directory. Specify the directory
rem here:
set actualdir=c:\this_is\an_example_path
rem You do not need to change anything that follows.
set actualfile=%0
set args=%1
:beginloop
if "%1" == "" goto endloop
shift
set args=%args% %1
goto beginloop
:endloop
%actualdir%\%actualfile% %args%
Как правило, вы должны быть осторожны при запуске командных файлов из Интернета, так как вы можетеделайте все с помощью пакетных файлов, например форматируйте жесткий диск.Если вы не доверяете приведенному выше коду (который я написал), вы можете проверить его, заменив строку
%actualdir%\%actualfile% %args%
на
echo %actualdir%\%actualfile% %args%
В идеале вы должны точно знать, что каждая строкаделает, прежде чем запустить его.