Một cách tôi có thể nghĩ đến là sử dụng các biến môi trường khác để lưu trữ các đường dẫn một phần; ví dụ, nếu bạn có
C:\this_is_a\long_path\that_appears\in_multiple_places\subdir1;
C:\this_is_a\long_path\that_appears\in_multiple_places\subdir2;
sau đó bạn có thể tạo một biến môi trường mới, chẳng hạn như
SET P1=C:\this_is_a\long_path\that_appears\in_multiple_places
sau đó đường dẫn ban đầu của bạn trở thành
%P1%\subdir1;
%P1%\subdir2;
EDIT: Một tùy chọn khác là tạo một bin
thư mục chứa .bat
các tệp trỏ đến các .exe
tệp thích hợp .
EDIT 2: Nhận xét của Ben Voigt cho một câu trả lời khác đề cập rằng việc sử dụng các biến môi trường khác như được đề xuất có thể không làm giảm thời lượng %PATH%
vì chúng sẽ được mở rộng trước khi được lưu trữ. Điều này có thể đúng và tôi chưa thử nghiệm cho nó. Một tùy chọn khác là sử dụng các biểu mẫu 8dot3 cho các tên thư mục dài hơn, ví dụ như C:\Program Files
thường tương đương với C:\PROGRA~1
. Bạn có thể sử dụng dir /x
để xem tên ngắn hơn.
EDIT 3: Bài kiểm tra đơn giản này khiến tôi tin rằng Ben Voigt đã đúng.
set test1=hello
set test2=%test1%hello
set test1=bye
echo %test2%
Vào cuối này, bạn thấy đầu ra hellohello
chứ không phải byehello
.
EDIT 4: Trong trường hợp bạn quyết định sử dụng các tệp bó để loại bỏ một số đường dẫn nhất định %PATH%
, bạn có thể quan tâm đến cách chuyển các đối số từ tệp bó của mình sang tệp thực thi để quy trình được minh bạch (nghĩa là bạn sẽ không nhận thấy sự khác biệt nào giữa việc gọi tệp bó và gọi tệp thực thi). Tôi không có nhiều kinh nghiệm viết các tệp bó, nhưng điều này có vẻ hoạt động tốt.
@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%
Theo nguyên tắc chung, bạn nên cẩn thận về việc chạy các tệp bó từ internet, vì bạn có thể thực hiện tất cả mọi thứ với các tệp bó như định dạng ổ cứng của bạn. Nếu bạn không tin tưởng mã ở trên (mà tôi đã viết), bạn có thể kiểm tra nó bằng cách thay thế dòng
%actualdir%\%actualfile% %args%
với
echo %actualdir%\%actualfile% %args%
Tốt nhất bạn nên biết chính xác những gì mỗi dòng làm trước khi bạn chạy nó.