Değişkeni Windows cmd.exe'de aynı komut satırında ayarlama ve kullanma


75

Bash, ben yapabilirim EDITOR=vim commandve commandberaber çalışacak olan EDITORsetin vim, ancak bu değeri etkilemez EDITORkabuk kendisi. Bunu yapmak mümkün mü cmd.exe?

Yanıtlar:


52

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 /Vkullanarak 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.


1
Makinemde Windows 10 sürüm 1607 ile test etti, cmd istemi çöküyor.
Fernando Costa Bertoldi

O EDİTÖR edecektir Not değil ayarlanmalıdır 'vim'fakat 'vim 'son komuta. Sonundaki boşluğu önlemek için iç tırnak ekleyin.
Zitrax,

@ Zitrax Sağ! Buna göre cevabı değiştirdim.
VonC

1
Not: ilginç: anahtarların sırası bu durumda önemlidir. cmd /v/c "..." çalışır, ancak cmd /c/v "..."başarısız - umarım size 15 dakika kaydedebilirsiniz
maoizm

1
@DerekGreer "Herhangi bir pratik sebep düşünemiyorum": Tamam, pratik bir sebep eklemek için cevabı değiştirdim.
VonC,

50

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.


5
Dikkatli ol. Değişkeni bu şekilde ayarlamak, EDITOR: "vim" değişkeninde bir boşluk bırakılmasına neden olur. Sondaki boşluktan kaçınmak için şunu kullanın: cmd / C "set" EDITOR = vim "&& bunu & & şunu yap"
Gerd K

1
Bu, örneğin "Windows Server 2008" üzerinde çalışmıyor. Bunu denedim: set name = "username" && echo% kullanıcı adı%. Ve kullanıcı adı boş.
akozin

@akozin Anahtarın geriye doğru gittiğinin farkında mısın? Şunu mu demek istediniz set name=foo&&echo %name%yoksa set username=foo&&echo %username%?
Phrogz

@akozin aşağıdaki
VonC


3

env.cmdLinux envkomutu 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, cmdayrış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ı, fordöngü içindeki komut dizesini oluşturarak 8 parametreli kısıtlamayı kaldırmak için hazırlanabilir (gecikmeli genişleme gerekli olacaktır).


Neden çok uzun kullanıcı komutlarına izin vermek için sadece %*sondadan bir satır (yani :DoCmdetiketten sonraki satır) olarak kullanmıyorsunuz ?
Scott

@Scott - Çünkü %*olduğunu orijinal parametre listesi: o etkilenmeyen shift(aksine $*Unix).
AFH
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.