बैश में, मैं कर सकता हूं EDITOR=vim command
और सेट के command
साथ चला EDITOR
जाऊंगा vim
, लेकिन यह EDITOR
शेल में स्वयं के मूल्य को प्रभावित नहीं करेगा । क्या इसमें ऐसा करना संभव है cmd.exe
?
बैश में, मैं कर सकता हूं EDITOR=vim command
और सेट के command
साथ चला EDITOR
जाऊंगा vim
, लेकिन यह EDITOR
शेल में स्वयं के मूल्य को प्रभावित नहीं करेगा । क्या इसमें ऐसा करना संभव है cmd.exe
?
जवाबों:
ध्यान दें कि cmd /C "set "EDITOR=vim" && echo %EDITOR%"
काम नहीं करेगा।
और न ही होगाcmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
/V
विलम्ब के !
रूप में विलंबित पर्यावरण चर विस्तार को सक्षम करने के लिए, विकल्प क्या होगा ।
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
के रूप में नीचे का उल्लेख द्वारा maoizm , यह है cmd /V /C
, नहीं cmd /C /V
(जो होता नहीं काम करते हैं)
मैं किसी भी व्यावहारिक कारण के बारे में नहीं सोच सकता, जिसे आप वास्तव में एकल कमांड के संदर्भ में चाहते हैं
आमतौर पर, आपको इसकी आवश्यकता तब होती है जब आपको एक लंबी कमांड लाइन में कई बार उपयोग किए जाने वाले मान को बदलना पड़ता है।
उदाहरण के लिए, Nexus (पठनीयता के लिए कई पंक्तियों में) के लिए एक फ़ाइल तैनात करने के लिए:
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/"
एक लंबी और जटिल कमांड लाइन में समूह, विरूपण साक्ष्य (2 बार उपयोग किया गया) और संस्करण को प्रतिस्थापित करने के बजाय, आप उन्हें उक्त कमांड की शुरुआत में संपादित कर सकते हैं । पैरामीटर मानों में हेरफेर और परिवर्तन करना स्पष्ट / आसान है।
'vim'
लेकिन 'vim '
अंतिम कमांड में। अंत में अंतरिक्ष से बचने के लिए आंतरिक उद्धरण जोड़ें।
cmd /v/c "..."
काम करता है, लेकिन cmd /c/v "..."
विफल रहता है - उम्मीद है कि यह आपको 15 मिनट बचा सकता है
आप इसे खिड़कियों में कर सकते हैं जैसे कि कुछ भी स्थापित करने की कोई आवश्यकता नहीं है।
cmd /C "set EDITOR=vim && set"
आपको चर की एक सूची दिखाई देगी और आप EDITOR = vim देखेंगे, अब "सेट" फिर से चलाएँ और इसे सूचीबद्ध नहीं किया जाएगा।
अतिरिक्त कमांड जोड़ने के लिए आप कई और & quot; कर सकते हैं:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
EDIT: / C दौड़ने के तुरंत बाद नए cmd को बाहर निकाल देता है, यदि आप नए के साथ आउटपुट का उत्पादन करते हैं तो यह अभी भी पैरेंट विंडो में दिखाई देगा।
आप उपयोग कर सकते हैं / K जिस स्थिति में नई cmd विंडो रन के अंत में खुली रहती है।
set name=foo&&echo %name%
या set username=foo&&echo %username%
?
आप env
GNWin32 http://gnuwin32.sourceforge.net/ में पैकेज CoreUtils से पोर्ट किए गए उपयोग का उपयोग कर सकते हैं
env.exe
% PATH% चर में मौजूद निर्देशिका की जाँच करेंenv EDITOR=vim command
मैंने एक बैच फ़ाइल खटखटाया है env.cmd
जो कमोबेश लिनक्स env
कमांड की तरह काम करती है : -
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
फर्क सिर्फ इतना है कि, जिस तरह से cmd
पर्स के कारण, पर्यावरण असाइनमेंट को उद्धृत करने की आवश्यकता होती है, इसलिए आपकी आज्ञा होगी:
env "EDITOR=vim" command [up to 8 parameters]
बैच फ़ाइल को for
लूप के भीतर कमांड स्ट्रिंग का निर्माण करके 8-पैरामीटर प्रतिबंध को हटाने के लिए विस्तृत किया जा सकता है (विलंबित विस्तार की आवश्यकता होगी)।
%*
पेन लाइन के रूप में (यानी :DoCmd
लेबल के बाद एक ) का उपयोग क्यों नहीं किया जाता है ?
%*
है मूल पैरामीटर सूची: यह से अप्रभावित है shift
(विपरीत $*
यूनिक्स में)।