Trong Bash, tôi có thể làm EDITOR=vim command
và command
sẽ được chạy với EDITOR
cài đặt vim
, nhưng điều này sẽ không ảnh hưởng đến giá trị của EDITOR
chính nó. Có thể làm điều này trong cmd.exe
?
Trong Bash, tôi có thể làm EDITOR=vim command
và command
sẽ được chạy với EDITOR
cài đặt vim
, nhưng điều này sẽ không ảnh hưởng đến giá trị của EDITOR
chính nó. Có thể làm điều này trong cmd.exe
?
Câu trả lời:
Lưu ý rằng cmd /C "set "EDITOR=vim" && echo %EDITOR%"
sẽ không hoạt động.
Cũng khôngcmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Điều gì sẽ là /V
tùy chọn, cho phép mở rộng biến môi trường chậm sử dụng !
như dấu phân cách.
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Như đã nêu dưới đây bằng cách maoizm , đó là cmd /V /C
, không cmd /C /V
(mà sẽ không làm việc)
Tôi không thể nghĩ ra bất kỳ lý do thực tế nào mà bạn thực sự muốn điều này trong bối cảnh của một lệnh
Thông thường, bạn cần điều này khi bạn phải thay thế một giá trị được sử dụng nhiều lần trong một dòng lệnh dài.
Chẳng hạn, để triển khai một tệp lên Nexus (trong nhiều dòng để dễ đọc):
cmd /v /c "set g=com.agroup&& set a=anArtifact&& set v=1.1.0&& \
mvn deploy:deploy-file -Dfile=C:\path\!a!-!v!.jar \
-Dpackaging=jar -DgroupId=!g! -DartifactId=!a! -Dversion=!v! \
-DrepositoryId=nexus
-Durl=http://myserver/nexus/content/repositories/my-repo/"
Thay vì phải thay thế nhóm, tạo tác (được sử dụng 2 lần) và phiên bản trong một dòng lệnh dài và phức tạp, bạn có thể chỉnh sửa chúng khi bắt đầu lệnh đã nói. Nó rõ ràng hơn / dễ dàng hơn để thao tác và thay đổi các giá trị tham số.
'vim'
nhưng 'vim '
trong lệnh cuối cùng. Thêm các trích dẫn nội bộ để tránh không gian cuối cùng.
cmd /v/c "..."
hoạt động, nhưng cmd /c/v "..."
thất bại - hy vọng nó có thể giúp bạn tiết kiệm 15 phút
Bạn có thể làm điều đó trong các cửa sổ như thế này không cần cài đặt gì cả.
cmd /C "set EDITOR=vim && set"
Bạn sẽ thấy một danh sách các biến và bạn sẽ thấy EDITOR = vim, bây giờ chạy lại "set" và nó sẽ không được liệt kê.
Bạn có thể thực hiện nhiều && để thêm các lệnh bổ sung:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
EDIT: / C thoát khỏi cmd mới ngay sau khi chạy, nếu bạn tạo đầu ra với cái mới, nó sẽ vẫn hiển thị trong cửa sổ cha.
Bạn có thể chọn sử dụng / K trong trường hợp cửa sổ cmd mới vẫn mở khi kết thúc hoạt động.
set name=foo&&echo %name%
hay set username=foo&&echo %username%
?
bạn có thể sử dụng port được sử dụng env
từ gói CoreUtils trong GnuWin32 http://gnuwin32.sourceforge.net/
env.exe
nào tồn tại trong biến% PATH%env EDITOR=vim command
Tôi đã gõ một tệp bó env.cmd
hoạt động ít nhiều như env
lệnh Linux : -
echo off
setlocal
for %%f in (%*) do (
echo %%f|find "=" >nul:
if errorlevel 1 goto DoCmd
set %%f
shift
)
:DoCmd
%1 %2 %3 %4 %5 %6 %7 %8 %9
endlocal
Sự khác biệt duy nhất là, do cách cmd
phân tích cú pháp, các bài tập môi trường cần được trích dẫn, vì vậy lệnh của bạn sẽ là:
env "EDITOR=vim" command [up to 8 parameters]
Tệp bó có thể được xây dựng để loại bỏ giới hạn 8 tham số bằng cách xây dựng chuỗi lệnh trong for
vòng lặp (sẽ cần mở rộng chậm).
%*
như dòng áp chót (tức là dòng sau :DoCmd
nhãn) để cho phép các lệnh người dùng rất dài?
%*
là danh sách tham số ban đầu : nó không bị ảnh hưởng bởi shift
(không giống như $*
trong Unix).