Windows toplu iş dosyalarının gizli özellikleri


232

Windows toplu iş dosyalarının daha az bilinen, ancak önemli ve yararlı özelliklerinden bazıları nelerdir?

Kuralları:

  • Yanıt başına bir özellik
  • Yalnızca dokümantasyon bağlantısı için değil , özelliğin kısa bir açıklamasını ve bir örneğini verin
  • Yanıtları yerel işlevlere sınırlayın , yani Windows Kaynak Seti gibi ek yazılım gerektirmez

Açıklama: Burada, WinNT varyantlarında varsayılan olan cmd.exe tarafından işlenen komut dosyalarına atıfta bulunuyoruz.

(Ayrıca bkz: Windows toplu iş dosyaları: .bat vs .cmd? )

Yanıtlar:


185

Hattın devamı:

call C:\WINDOWS\system32\ntbackup.exe ^
    backup ^
    /V:yes ^
    /R:no ^
    /RS:no ^
    /HC:off ^
    /M normal ^
    /L:s ^
    @daily.bks ^
    /F daily.bkf

2
Bunu geçen hafta arıyordum! (karakteri hatırlayamadım)
chilltemp

21
^ Gerçekten bir alıntı karakter. Bunu kullanarak, çıktıyı yeniden yönlendirmemek için <ve> işaretini kullanabilirsiniz. Satırın sonundaki ^ de satırın devam etmesine izin verir.
Cheeso

Bu küçük senaryoyu açıklayabilir misiniz?
guerda

2
@furtelwart: Eğer tek bir hizaya yazmış sanki bu aynı: call C:\WINDOWS\system32\ntbackup.exe backup /V:yes /R:no /RS:no /HC:off /M normal /L:s @daily.bks /F daily.bkf. Ve bu hattın tüm parametrelerini anlamak için çalıştırın C:\WINDOWS\system32\ntbackup.exe /?.
Kurt Pfeifle

Bu konu hakkında derinlemesine tartışma, uzun komutlarda birden fazla satıra bölünmüş
jeb

150
PUSHD path

Sizi yol tarafından belirtilen dizine götürür .

POPD

Sizi "ittiğiniz" dizine geri götürür.


5
Bu aynı zamanda tam bir yığın olarak da çalışır, böylece birçok dizini yığının üzerine itebilir ve bulunduğunuz yere geri dönmek için haşhaş devam edebilirsiniz.
Kibbee

Ciddi anlamda? Bu özelliği daha önce hiç duymadım mı ?!
Josh Hinman

4
'Cmd.exe' dosyasını çalıştırın, ardından 'help' yazın, ardından 'help pushd' veya 'pushd /?' Yazın.
paxdiablo

86
Bir UNC yoluna iterseniz, otomatik olarak bir sürücüyü sizin için eşler ve popd bu haritanın eşlemesini kaldırır.
Ferruccio

2
Özellikle UNC yeteneği için +1, bunu cevabınıza eklemelisiniz.
Adam Mitz

109

Bunun bir toplu iş dosyasında ne kadar yararlı olacağından emin değilim , ancak komut isteminde kullanmak için çok uygun bir komut:

C:\some_directory> start .

Bu, Windows Gezgini'ni "bazı_dizini" klasöründe açar.

Bunu harika bir zaman kazandırıcı buldum.


1
Ben de kullanıyorum. PATH dizinlerinden birinde "open.cmd" dosyası var ve bu dosyadaki tek şey "@start". ;)
Paulius

5
'explorer' ayrıca 'start' C: \ some_directory> explorer ile aynı şeyi yapar.
Ray

1
Bunu "start" "olarak yazma eğilimindeyim. ] (netlik için parantez) çünkü başlangıç ​​bazen ilk parametrenin bir başlık olması konusunda titizdir.
sistem DURAKLAT

1
Bir Mac'te bulunuyorsanız, open .aynı şeyi yapar.
Grant Paul

1
startsadece geçerli klasörü açmaktan daha fazlasını yapar. Herhangi bir dosyayı aktarabilirsiniz ve yapılandırılmış görüntüleyici ile açacaktır. Bir URL verin ve varsayılan tarayıcınız açılır, vb ...
idbrii

87

Her satırda bir anahtar kelime ile işaretlenmiş yorumları okumak zor buldum:

REM blah blah blah

Daha kolay okunabilir:

:: blah blah blah

8
Ben duydum :: REM daha verimli çünkü REM ondan sonra meydana gelen şeyler üzerinde ortam değişken genişleme yapmaya çalışır, ancak :: değil.
Scott Langham

47
Aslında, :: sadece komik bir isme sahip bir etikettir; Bu nedenle, :: etiketlere izin verilmediğinden bir blok içinde (parantez içinde) kullanırsanız çalışmaz. REM elbette orada çalışıyor.
mihi

Ancak bunun yalnızca bir uygulama ayrıntısı olduğu rembelgelenmiş bir anahtar kelime olduğunu unutmayın ::. O olası olsa da ::çalışmayı durdurur o belgesiz davranış güvenmek değil genel olarak tavsiye edilir.
Joey

goto :Etikete atlamak için bile kullanabilirsiniz . :-)ve goto -)ayrıca çalışacak.
Sven Marnach

79

Değişken alt dizeler:

> set str=0123456789
> echo %str:~0,5%
01234
> echo %str:~-5,5%
56789
> echo %str:~3,-3%
3456

3
Çirkin, ama çok yararlı!
guerda

1
@furtelwart kulağa sloganı olabilir gibi geliyor
rzrgenesys187

tarihleri ​​biçimlendirmek için bu harika (ancak bulduğum sorun vista / 7 ve xp çıktısının TARİHİ farklı olduğu idi)
Daniel

Ne yazık ki, for %a in ...çevre değişkenleri gibi kapanış yüzdesi işareti gerektirmedikleri için FOR döngülerinin ( ) yerel değişkenleriyle birleştirilemeyeceğini unutmayın ; önce bunları bir ortam değişkenine (gecikmeli genişletme kullanarak!) atamalı ve sonra bir alt dize çıkarmalısınız.
RolKau

Tarihli bir şey yapmak istiyorsanız (örn. Yedek dosya adları) bu kaçınılmaz bir çirkinliktir. Windows komut satırının genel çirkinliğine tanık olduktan sonra, Windows'un neden çoğunlukla tıklayıp tıkladığını görüyorum :) Yeni PowerShell'in daha iyi olduğunu söylüyorlar.
Halil Özgür

72

FOR komutu ! Toplu iş dosyaları yazmaktan nefret ederken, bunun için minnettarım.

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

noktalı virgülle başlayan satırları yok sayarak, virgül ve / veya boşluklarla sınırlanmış jetonlarla birlikte, her satırdan gövdeye 2. ve 3. jetonu geçiren satırları yok sayar. For body ifadelerinin 2. jetonu almak için% i, 3. jetonu almak için% j ve 3.dan sonra kalan tüm jetonları almak için% k olduğuna dikkat edin.

Bunu dizinler, dizin içerikleri vb. Üzerinden yinelemek için de kullanabilirsiniz.


4
Toplu iş dosyaları 'FOR döngüler yazmak için sınırlı ve korkunç buldum, ancak bazen yararlıdır.
ya23

2
Şaşkınlığımı affedin, ama bu nasıl yeryüzünde yetersiz kullanılıyor? Döngüler için bilmiyorsanız, toplu komut dosyası bilmediğinizi düşünüyorum.
Stil ile Kodlama

11
Az kullanılan veya kullanılmayan işkence. (Bazıları gerekli bir kötülüğü savunur.)
harpo

Birkaç kez kullanmak zorunda kaldım ve bu sözdizimini oluşturan kişi işten çıkarılmalıdır. Bir toptan. Güneşe. Bu kötü.
VitalyB

1
@CodingWithStyle: Bir toplu iş dosyasında bir for döngüsü yazmam gerektiğinde, komut dosyası bir bash başlatıcısı haline gelir ve komut dosyasını bash (veya python) olarak yeniden yazar
:)

60

REM veya :: satırları içeren bir komut dosyasını alt etmek yerine, her komut dosyasının üst kısmında aşağıdakileri yaparım:

@echo OFF
goto :START

Description of the script.

Usage:
   myscript -parm1|parm2 > result.txt

:START

Yöneltme ve yönlendirme karakterlerini kaçmadan nasıl kullanabileceğinizi unutmayın.


3
% 1 için "/?" Seçeneğini işaretlerseniz daha da soğuk olur. ve sonra bu bölümü yardım metni olarak tekrarlayabilirsiniz.
demoncodemonkey

6
Hmm, okur-yazar toplu programlama?!
Muhammed Alkarouri

54

Komut dosyasının bulunduğu yol (sürücü ile): ~ dp0

set BAT_HOME=%~dp0
echo %BAT_HOME%
cd %BAT_HOME%

Bunun için genellikle% CD% kullanıyorum. Belki tüm DOS kabuk sürümlerinde yoktur?
Saul Dolgin

11
% CD% geçerli dizindir,% ~ dp0 ise çalışan komut dosyasının bulunduğu dizindir.
RealHowTo

Ayrıca,% CD% 'nin daha önce var olduğunu düşünmüyorum ... XP, belki. Windows'un bazı eski sürümlerinde bulunmadığını biliyorum.
Thomas Owens

1
Yarasa başka bir sürücüdeyse, bunun yerine cd / d% BAT_HOME% kullanmalısınız. Doğru hatırlıyorsam, bu eski DOS'larla olsa da çalışmayacak.
ketorin

Bir ağ yolunda toplu iş çalıştırdığınızda cd veya pushd% BATH_HOME% çalışmaz.
Benoit

49

% ~ Dp0 parçasından daha önce bahsedilmişti, ama aslında daha fazlası var: ~ işaretinden sonraki karakter (ler) ayıklanan bilgiyi tanımlar.
Yama dosyası adı dönüşü yok mektup sonucu
d - sürücü harfi döndürür
döndürür yolu - p
s - getirileri kısa yol
x - döndürür dosya uzantısı
Eğer c aşağıda komut TEST.BAT yürütmek Yani: \ Temp \ long dir name \ klasörü,

@echo off
echo %0
echo %~d0
echo %~p0
echo %~dp0
echo %~x0
echo %~s0
echo %~sp0

aşağıdaki çıktıyı alırsınız

test
c:
\Temp\long dir name\
c:\Temp\long dir name\
.bat
c:\Temp\LONGDI~1\test.bat
\Temp\LONGDI~1\

Ve betiğinize
test c: \ temp \ mysrc \ test.cpp'deki gibi bir parametre iletilirse
,% 1 değişkeni ile aynı manipülasyonlar yapılabilir.

Ancak% 0 genişlemesinin sonucu konuma bağlıdır!
Toplu işin "üst düzeyinde" geçerli toplu iş dosya adına genişler.
Bir işlevde (çağrı), işlev adına genişler.

@echo off
echo %0
call :test
goto :eof

:test
echo %0
echo %~0
echo %~n0

Çıktı (batchfile myBatch.bat ile başlatılır)

myBatch.bat
:test
:test
myBatch

43

CALL, EXIT / B, SETLOCAL ve ENDLOCAL tuşlarını kullanarak yerel değişkenlerle alt rutinler uygulayabilirsiniz.

misal:

@echo off

set x=xxxxx
call :sub 10
echo %x%
exit /b

:sub
setlocal
set /a x=%1 + 1
echo %x%
endlocal
exit /b

Bu yazdırılacak

11
xxxxx

rağmen: sub x'i değiştirir.


6
Çıkış / b yerine goto: eof kullanmalısınız, aynı şeyi yapar, ancak bunu yapmanın daha standart bir yoludur.
Philibert Perusse

2
Bunun bir standardı var mı? O_o
Paulius

3
Benim hatam. Açıkça bir: eof etiketi tanımlamak ve buna goto yapmak istediğinizi düşündüm. Her toplu iş dosyasının sonunda örtük: eof etiketi olduğunu fark etmedim.
Ferruccio

3
Ancak, bir alt yordamın hata düzeyi ayarlamasını istiyorsanız, exit / b komutunu kullanmanız gerekir. Örneğin: çıkış / b 3
Chris Noe

6
En iyi bir alt programdan dönmek için "goto: eof" yerine "çıkış / B" kullanmak için buldum, "goto: eof" yutmak istediğinizde bir hata kodu dönebilirsiniz sorunu var. Örneğin "eğer someFile yankı varsa" kullanırsanız, someFile yoksa hata seviyesini ayarlar, ancak bu yanlış değildir ve döndürmek istediğiniz bir hata kodu değildir (bu da " goto: eof "yapar).
Scott Langham

42

N saniye beklemek için gizli numara (cmd.exe'nin bir parçası değil, Windows ile birlikte geldiğinden fazladan bir yazılım değildir), ping hattına bakın. İlk ping gecikmeden söneceği için N + 1 pinglerine ihtiyacınız var.

    echo %time%
    call :waitfor 5
    echo %time%
    goto :eof
:waitfor
    setlocal
    set /a "t = %1 + 1"
    >nul ping 127.0.0.1 -n %t%
    endlocal
    goto :eof

2
Daha da iyisi, bunu tekrar tekrar yazma zahmetinden kurtarmak için sleep.bat gibi bir dosyaya koymaktır.
erjiang

1
... ve PAT. ortam değişkenindeki bir dizine sleep.bat dosyasını koydu
Scoregraphic

Bunu dışarıya koymak, Windows sistemlerinde daha az taşınabilir hale getirmek ...
sorin

37

"Sıhhi tesisat" kaçan:

echo ^| ^< ^> ^& ^\ ^^

3
Bahse girerim DOS kaçış karakteri iyi bilinmemektedir. İyi bir.
Joshua

12
Ah, bu neden hat devam operatörü olduğunu açıklayacaktı - tıpkı bash \ 'de olduğu gibi yeni satırdan kaçıyor ...
leander

@leander: Evet, ancak LF'den (ve CR'den) kaçabilir, çünkü tüm
CR'ler daha

Yani bu önceki (işlemek karşı diff için Windows üzerinde budala kullanarak yüzden HEAD^) problemlidir.
Daniel Trebbien

31

Komutları çalıştırabilme ve çıktıları işleyebilme (bash içindeki '$ ()' in tersi gibi).

for /f %i in ('dir /on /b *.jpg') do echo --^> %i

Dosya adlarında boşluk varsa bunu kullanın:

for /f "tokens=*" %i in ('dir /on /b *.jpg') do echo --^> %i

2
Adlarında boşluk bulunan dosya adları ile çalışmaz ... Bu çalışır: / f "tokens = *"% i in ('dir / on / b * .jpg') için echo - ^>% i
doekman

İyi yakalama. Şahsen dosya isimlerindeki boşlukların Cehennem'in dokuzuncu çemberinin derinliklerinden kötü iğrenç şeyler olduğunu düşünüyorum. Ama onlara hitap etmeliyiz sanırım.
paxdiablo

Bu şimdiye kadar gördüğüm en çılgın sözdizimi. Bu backtick.bat dosyasını yaptıysanız ve dizeyi geçirirseniz çalışır mı?
idbrii

30

Boş bir dosya oluşturma:

> copy nul filename.ext

6
@devio: yankı. boş bir çizgi koyar. bu yüzden dosya boş olmaz!
Paulius

4
Bunun type nul > filename.extiçin kullanıyorum.
Benoit

Nice Uzun zamandır bir dokunuş eşdeğeri olup olmadığını merak ediyordum.
jdelator

Her zaman kullandımren > blah.txt
Synetech

28

Bir komuttaki tüm çıktıları gizlemek için> nul 2> & 1'e yönlendirin.

Örneğin, bazı komut satırı programları> nul'e yönlendirseniz bile çıktı görüntüler. Ancak, çıktıyı aşağıdaki satır gibi yönlendirirseniz, tüm çıktılar bastırılır.

PSKILL NOTEPAD >nul 2>&1

DÜZENLEME: Bunun nasıl çalıştığına dair açıklama için bkz . Bir komutun çıkışını yoksayma .


1
Bunun nasıl çalıştığını biliyor musunuz? 2> 1 bit'in anlamı nedir?
Scott Langham

12
> Nul, STDOUT'u nul'a yönlendirir. 2> & 1, STDERR'u STDOUT'un işaret ettiği yere yönlendirir.
aphoria

Özellikle, 2> & 1, STDERR bir STDOUT klonuna ayarlanan bir "filehandle klonu" olduğunu düşünüyorum. > NUL'den sonra koymak önemlidir, çünkü daha önce değil, yönlendirildikten sonra STDOUT'u klonlamak istiyorsunuz . (Lütfen burada yanılıyorsam beni düzeltin.)
leander

1
PSKILL'in nereden geldiğini merak edenler için sysinternals.com adresini ziyaret edin . Bir Pro sürümü kullanıyorsanız, aşağı yukarı aynı olan yerel bir TSKILL komutuna sahip olmalısınız.
Stil ile Kodlama

1
Eğer pskill veya tskill'iniz yoksa, kullandığım çoğu Windows sistemi birlikte gelir taskkill.
idbrii

25
PAUSE

Yürütmeyi durdurur ve aşağıdaki istemi görüntüler:

Devam etmek için herhangi bir tuşa basın . . .

Bir toplu işi Windows Gezgini'nde çift tıklatarak çalıştırmak ve çıktıyı yalnızca komut penceresinin yanıp sönmesi yerine görmek istiyorsanız kullanışlıdır.


Yazdığım her komut dosyasının sonuna etiketlediğim için bu "az kullanılan" derdi. Daha sonra, IDE'nizin komut dosyasını çalıştırmasını ve çıktıyı yakalamasını istediğinizde o kadar iyi çalışmaz, çünkü IDE'nin genellikle sizin için enter tuşuna
basmanın bir

15
"Duraklat" ın düzgün bir özelliği, "herhangi bir anahtar" alacak terminal yoksa (örneğin, toplu iş dosyanız bir sistem hizmetinden çalıştırılıyorsa), bunu algılar ve devam eder ...
leander

4
Charlie Somerville'e +1, bu her oyun programcının 'go.bat' ı 90'ların başında kullandığı biliniyor.
LiraNuna

6
Tüm toplu iş dosyalarınızı kirletmek (ve CLI meraklıları için onları rahatsız etmek yerine) Başlat / Çalıştır / ardından 'cmd / k' ve toplu iş dosya adını kullanabilirsiniz. VEYA HKCR \ batfile \ shell \ open \ command varsayılan dizesini 'cmd / k "% 1"% *' olarak değiştirin. VEYA sadece '@cmd / k $ *' çalıştıran başka bir toplu iş dosyası oluşturun, masaüstüne koyun ve diğer toplu iş dosyalarınızı üzerine bırakın. DURAKLATMA için birçok alternatif vardır. Lütfen düşünün.
sistem DURAKLAT

1
@gnud: senaryoya hala yönelebilirsiniz: echo.|batch-with-pause.bat'herhangi bir tuşa' basmakla aynı etkiye sahip olacak ...
Kurt Pfeifle

25

Bash (ve diğer mermilerin) eşdeğeri

echo -n Hello # or
echo Hello\\c

" Hello", sondaki yeni satır olmadan çıktı . Bunu yapmak için bir cmd hack:

<nul set /p any-variable-name=Hello

set /pkullanıcıdan girdi girmesini istemenin bir yoludur. Verilen dizeyi yayar ve kullanıcının bir yanıt yazmasını bekler (aynı satırda, yani CRLF yok).

<nulsadece set /pkomuta boş bir yanıt verir , böylece net sonuç yayılan bilgi istemi dizesidir. (Kullanılan değişken, boş yanıt nedeniyle değişmeden kalır.)

Sorunlar: Önde gelen eşittir işaretinin çıktısı alınamaz ve Vista'da önde gelen boşluk karakterleri kaldırılır, ancak XP'de kaldırılmaz.


18

Ortam değişkenlerini ayarlarken arama ve değiştirme:

> @set fname=%date:/=%

... zaman damgalı dosya adlarında kullanılmak üzere "/" tarihini kaldırır.

ve alt dizeleri de ...

> @set dayofweek=%fname:~0,3%

17

Tam sayı aritmetiği:

> SET /A result=10/3 + 1
4

SET'in hesaplama süresi ne kadardır? Windows XP?
chakrit

1
Değerlerin ne kadar büyük olabileceğini soruyorsanız, bunun 32 bit olduğuna inanıyorum. Yani +/- 2 milyar.
Chris Noe

1
Bence soru, SET'in ne kadar süre hesaplayabildiğiydi? Windows XP'den beri mi?
Michael Myers

3
CMD.EXE SET, NT 3.1 ya da öylesine beri hesaplamak mümkün olmuştur şey.
CMD.EXE'nin

16

Komut ayırıcılar:

cls & dir
copy a b && echo Success
copy a b || echo Failure

2. satırda, && 'den sonraki komut yalnızca ilk komut başarılı olduğunda çalışır.

3. satırda || yalnızca ilk komut başarısız olduğunda çalışır.



15

Kısa devre yapan bir boole `ve 'gibi bir etki elde etmek için if ifadelerini zincirleyebilirsiniz.

if foo if bar baz

1
Bu gerçekten sadece ifs yuvalama için bir kısayoldur: if foo ( if bar ( baz ) )(Parantez sonra satırsonu hayal edin.)
idbrii

14

Bir Unicode metin dosyasını (16bit / char) hızlı bir şekilde ASCII DOS dosyasına (8bit / char) dönüştürmek için.

C:\> type unicodeencoded.txt > dosencoded.txt

bonus olarak, mümkünse karakterler doğru şekilde eşlenir.


1
Bu bir ANSI DOS dosyası - ASCII 7bit / char.
MarkJ

Lol, bu bir anti-model, bu dönüşümün başarısız olma olasılığı yüksek. Unicode'u destekleyen tek 8 bit kodlama UTF-8'dir, ancak M $ sayesinde UTF-8 kod sayfasını Windows'ta ayarlayamazsınız.
sorin

14

blok yapısı ise:

if "%VS90COMNTOOLS%"=="" (
  echo: Visual Studio 2008 is not installed
  exit /b
)

3
Değişkenlerin bir seferde genişleyeceğini bildiğiniz sürece (gecikmeli genişleme olmadan) - yani% ERRORLEVEL% değerini burada anlamlı bir şekilde kullanamazsınız.
Duncan Smart

Ayrıca if ifadesini zamanından önce sona erdireceği için etiketleri (bu :: stil yorumlarını içeren) de kullanamazsınız.
Stil ile Kodlama

2
@Duncan: Sözde değişkeni %ERRORLEVEL%yine de kullanmamalısınız; bunun if errorlevel <foo>için var. Ve bu aslında bu tür bloklarda işe yarar.
Joey

12

Değişkenlerin gecikmeli genişlemesi (iyi ölçüm için alt dizeler atılmış):

    @echo off
    setlocal enableextensions enabledelayedexpansion
    set full=/u01/users/pax
:loop1
    if not "!full:~-1!" == "/" (
        set full2=!full:~-1!!full2!
        set full=!full:~,-1!
        goto :loop1
    )
    echo !full!
    endlocal

12

Çok fazla işlevsellik sağlamaz, ancak görev çubuğundaki uzun bir komut dosyasında durum sağlamak veya yalnızca kullanıcı geri bildirimlerini geliştirmek için title komutunu birkaç kullanım için kullanabilirsiniz.

@title Searching for ...
:: processing search
@title preparing search results
:: data processing

2
İlginç. Bundan sonra, şu anda çalışan komutu göstermek için normal özelliği kaybedersiniz. Bunu sıfırlamanın bir yolu var mı?
Chris Noe

2
technet.microsoft.com/en-us/library/bb491017.aspx kendi başına "başlık" ile sıfırlanabileceğini söylüyor, ancak bu Windows 7'de çalışmıyor gibi görünüyor ...
ℳ.

11

Kullanışlı bir düzenleyiciniz yok ve toplu iş dosyası mı oluşturmanız gerekiyor?

copy con test.bat

Sadece komutları yazın, yeni bir satır için enter tuşuna basın. Dosyayı kapatmak için Ctrl-Z ve Enter tuşlarına basın.


4
Heh, bu beni geri götürüyor.
Stil ile Kodlama

11

"YYYY-AA-GG SS: DD: SS.txt" adlı dosyayı almak dateve timealmak için dize çıkarma örneği

echo test > "%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%_%time:~3,2%_%time:~6,2%.txt"

kullanırım colorBetiğimin başarılı bir şekilde bitip bitmediğini, başarısız olduğunu veya metin ve arka plan rengini değiştirerek bazı girdilere ihtiyaç duyduğunu belirtmek için . Görüş alanınıza erişebileceğiniz ancak oldukça uzaktaki bir makineniz olduğunda gerçekten yardımcı olur

renk XY

burada X ve Y, 0ila arasındaki onaltılık değerdirF , burada X = Y rengi değişmediğinde X - arka planı, Y - metni.

renk Z

metin rengini 'Z' olarak değiştirir ve siyah arka planı ayarlar, 'renk 0' çalışmaz

renk isimleri için

renk ?


düzenlendi; _'ler italik olarak yorumlandı. Güzel kod biraz.

@Duncan Smart: doğru değil, aynı zamanda İngiltere İngilizcesinde de çalışıyor (teknik olarak "renk", grrr olsa da)
demoncodemonkey

10

Boşluk ve kaçış karakterleriyle çıktı üzerinde tam kontrol:

echo.    ^<resourceDir^>/%basedir%/resources^</resourceDir^>

1
Bu nasıl çalışıyor? Nokta, metin çıktısının başlangıcını gösterir mi?
Chris Noe

3
"echo. x", "<space> x" çıktısını verir, "echo x" yalnızca "x" çıktısını verir. Bu, önde gelen alanlara izin verir. Ayrıca, "^" çıkış karakteri cmd'nin tüm bu "<" ve ">" karakterlerinin G / Ç yönlendirmesi olduğunu düşünmesini engelleyecektir.
paxdiablo

1
echo (daha iyidir, çünkü echo. bu dosya yankı varsa "echo" adlı bir dosya için bir dosya araması oluşturur. eğer değilse, o zaman dahili yankı yürütülür, ancak
echo'dan

9

TheSoftwareJedi zaten for komutundan bahsetti, ama çok güçlü olduğu için tekrar anlatacağım.

Aşağıdaki geçerli tarihi YYYYMMDD biçiminde çıktılar, ben yedekleme için dizinler oluştururken bunu kullanın.

for /f "tokens=2-4 delims=/- " %a in ('DATE/T') do echo %c%b%a

2
Elbette DATE / T, Avrupa'da 29/10/2008 ve ABD'de 10/29/2008 döndürüyor ... bu nedenle bazı yerelleştirme gerekebilir! ;-)

Doğru! Ancak hangi tarih biçiminin kullanıldığını bulmak için tarih komutunu kötüye kullanabilirsiniz.
remonedo

4
Aşırı FOR kullanımı, imo. Ben sadece% DATE: ~ 10,4 %% DATE: ~ 4,2 %% DATE: ~ bir tarih komutunu çalıştırmak yerine bunun için ~ 7,2% kullanmak istiyorum düşünüyorum.
Stil ile Kodlama
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.