Bash, ben yapabilirim EDITOR=vim command
ve command
beraber çalışacak olan EDITOR
setin vim
, ancak bu değeri etkilemez EDITOR
kabuk kendisi. Bunu yapmak mümkün mü cmd.exe
?
Bash, ben yapabilirim EDITOR=vim command
ve command
beraber çalışacak olan EDITOR
setin vim
, ancak bu değeri etkilemez EDITOR
kabuk kendisi. Bunu yapmak mümkün mü cmd.exe
?
Yanıtlar:
Not cmd /C "set "EDITOR=vim" && echo %EDITOR%"
işe yaramaz.
Ne olmazcmd /C "setlocal ENABLEDELAYEDEXPANSION && set "EDITOR=vim" && echo !EDITOR!"
Sınırlayıcı olarak /V
kullanarak gecikmeli ortam değişkeni genişlemesini etkinleştirme seçeneği ne olacaktır !
.
C:\> cmd /V /C "set EDITOR=vim&& echo !EDITOR!"
vim
Gibi aşağıda belirtildiği tarafından maoizm , öyle cmd /V /C
, değil cmd /C /V
(hangi değil çalışmak)
Bunu tek bir emir bağlamında gerçekten istemiş olmanızın herhangi bir pratik sebebini düşünemiyorum.
Genellikle, uzun bir komut satırında birden çok kez kullanılan bir değeri değiştirmeniz gerektiğinde buna ihtiyacınız vardır.
Örneğin, bir dosyayı Nexus'a dağıtmak için (okunabilirlik için birden çok satırda):
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/"
Uzun, karmaşık bir komut satırında grup, yapı (2 kez kullanılır) ve sürüm değiştirmek zorunda kalmak yerine , söz konusu komutun başında bunları düzenleyebilirsiniz . Parametre değerlerini değiştirmek ve değiştirmek daha açık / kolaydır.
'vim'
fakat 'vim '
son komuta. Sonundaki boşluğu önlemek için iç tırnak ekleyin.
cmd /v/c "..."
çalışır, ancak cmd /c/v "..."
başarısız - umarım size 15 dakika kaydedebilirsiniz
Böyle bir pencerede yapabilirsiniz, herhangi bir şey yüklemeye gerek yoktur.
cmd /C "set EDITOR=vim && set"
Bir değişkenler listesi göreceksiniz ve EDITOR = vim göreceksiniz, şimdi tekrar "set" çalıştırın ve listelenmeyecek.
Ek komut eklemek için birden fazla && işaretini yapabilirsiniz:
cmd /C "set EDITOR=vim && do this && do that && otherstuff"
EDIT: / C çalıştırıldıktan hemen sonra yeni cmd'den çıkar, yenisi ile çıktılarsanız ana pencerede görünmeye devam eder.
/ K'yi kullanmayı tercih edebilirsiniz, bu durumda yeni cmd penceresi çalışma sonunda açık kalır.
set name=foo&&echo %name%
yoksa set username=foo&&echo %username%
?
env
GnuWin32 http://gnuwin32.sourceforge.net/ adresindeki CoreUtils paketinden port kullanımı kullanabilirsiniz
env.exe
% PATH% değişkeninde hangi dizinin mevcut olduğunu kontrol edinenv EDITOR=vim command
env.cmd
Linux env
komutu gibi az ya da çok çalışan bir toplu iş dosyası hazırladım : -
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
Tek fark, cmd
ayrıştırma biçimi nedeniyle , ortam atamalarının alıntılanması gerektiğidir, bu nedenle komutunuz:
env "EDITOR=vim" command [up to 8 parameters]
Toplu iş dosyası, for
döngü içindeki komut dizesini oluşturarak 8 parametreli kısıtlamayı kaldırmak için hazırlanabilir (gecikmeli genişleme gerekli olacaktır).
%*
sondadan bir satır (yani :DoCmd
etiketten sonraki satır) olarak kullanmıyorsunuz ?
%*
olduğunu orijinal parametre listesi: o etkilenmeyen shift
(aksine $*
Unix).