Ukryte funkcje plików wsadowych systemu Windows

232

Jakie są mniej znane, ale ważne i przydatne funkcje plików wsadowych systemu Windows?

Wytyczne:

  • Jedna funkcja na odpowiedź
  • Podaj zarówno krótki opis funkcji, jak i przykład , a nie tylko link do dokumentacji
  • Ogranicz odpowiedzi do natywnej funkcjonalności , tzn. Nie wymaga dodatkowego oprogramowania, takiego jak Windows Resource Kit

Wyjaśnienie: Odwołamy się tutaj do skryptów przetwarzanych przez cmd.exe, który jest domyślny w wariantach WinNT.

(Zobacz także: Pliki wsadowe systemu Windows: .bat vs. .cmd? )

Chris Noe
źródło

Odpowiedzi:

185

Kontynuacja linii:

call C:\WINDOWS\system32\ntbackup.exe ^
    backup ^
    /V:yes ^
    /R:no ^
    /RS:no ^
    /HC:off ^
    /M normal ^
    /L:s ^
    @daily.bks ^
    /F daily.bkf
Chris Noe
źródło
2
Szukałem tego w zeszłym tygodniu! (nie pamiętam postaci)
chilltemp
21
^ Jest naprawdę cytatem. Korzystając z niego, możesz cytować <i>, aby nie przekierowywać danych wyjściowych. ^ Na końcu linii pozwala również na kontynuację linii.
Cheeso
Czy mógłbyś wyjaśnić ten mały skryptlet?
guerda
2
@furtelwart: To jest taka sama, jak gdybyś napisał wszystko w jednym wierszu: call C:\WINDOWS\system32\ntbackup.exe backup /V:yes /R:no /RS:no /HC:off /M normal /L:s @daily.bks /F daily.bkf. Aby zrozumieć wszystkie parametry tej linii, po prostu uruchom C:\WINDOWS\system32\ntbackup.exe /?.
Kurt Pfeifle,
Dogłębna dyskusja na ten temat przy długich poleceniach podzielonych na wiele wierszy
jeb
150
PUSHD path

Przechodzi do katalogu określonego ścieżką .

POPD

Przenosi Cię z powrotem do katalogu, z którego „wypchnąłeś”.

kruk
źródło
5
Działa to również jako pełny stos, dzięki czemu możesz wcisnąć wiele katalogów na stos, a następnie ciągle się pojawiać, aby wrócić do miejsca, w którym byłeś.
Kibbee
Poważnie? Jak nigdy wcześniej nie słyszałem o tej funkcji ?!
Josh Hinman
4
Uruchom „cmd.exe”, następnie wpisz „help”, a następnie wpisz „help pushd” lub „pushd /?”.
paxdiablo
86
Jeśli wypchniesz na ścieżkę UNC, automatycznie zamapuje dysk dla ciebie, a popd go odmapuje.
Ferruccio
2
+1, szczególnie w przypadku zdolności UNC, powinieneś dodać to do swojej odpowiedzi.
Adam Mitz
109

Nie jestem pewien, jak przydatne byłoby to w pliku wsadowym , ale jest to bardzo wygodne polecenie do użycia w wierszu polecenia:

C:\some_directory> start .

Spowoduje to otwarcie Eksploratora Windows w folderze „some_directory”.

Uważam, że to świetna oszczędność czasu.

LeopardSkinPillBoxHat
źródło
1
cóż, ja też tego używam. Mam plik „open.cmd” w jednym z katalogów PATH, a jedyną rzeczą w tym pliku jest „@start”. ;)
Paulius
5
„explorer” robi to samo, co „start” C: \ some_directory> explorer.
Ray
1
Zazwyczaj wpisuję to jako [start ””. ] (nawiasy klarowne dla przejrzystości), ponieważ start jest czasami wybredny, gdy pierwszy parametr jest tytułem.
system PAUSE
1
Jeśli zdarzy ci się być na komputerze Mac, open .robi to samo.
Grant Paul
1
startrobi znacznie więcej niż tylko otwieranie bieżącego folderu. Możesz przekazać dowolny plik, a on otworzy go w skonfigurowanej przeglądarce. Podaj adres URL, a otworzy się domyślna przeglądarka itp.
idbrii
87

Zawsze miałem trudności z czytaniem komentarzy oznaczonych słowem kluczowym w każdej linii:

REM blah blah blah

Łatwiej czytać:

:: blah blah blah
Chris Noe
źródło
8
Słyszałem, że :: jest bardziej wydajny niż REM, ponieważ REM próbuje rozszerzyć zmienne środowiskowe na rzeczy, które występują po nim, ale :: nie.
Scott Langham,
47
W rzeczywistości :: to tylko etykieta o śmiesznej nazwie; dlatego :: :: nie będzie działać, jeśli użyjesz go w bloku (w nawiasach), ponieważ etykiety również tam nie są dozwolone. REM oczywiście tam działa.
mihi,
Pamiętaj jednak, że remjest to udokumentowane słowo kluczowe, a ::jedynie szczegół implementacji. Chociaż jest mało prawdopodobne, że ::przestanie działać, ogólnie zaleca się, aby nie polegać na nieudokumentowanym zachowaniu.
Joey
Możesz nawet użyć, goto :aby przejść do etykiety. :-)i goto -)będzie również działać.
Sven Marnach,
79

Zmienne podciągi:

> set str=0123456789
> echo %str:~0,5%
01234
> echo %str:~-5,5%
56789
> echo %str:~3,-3%
3456
Chris Noe
źródło
3
Brzydkie, ale bardzo przydatne!
guerda
1
@furtelwart brzmi tak, że to może być motto partii
rzrgenesys187
świetnie nadaje się do formatowania dat (jednak znalazłem problem, że vista / 7 i xp wypisują DATE inaczej)
Daniel
Zauważ, że niestety nie można tego połączyć z lokalnymi zmiennymi pętli FOR ( for %a in ...), ponieważ nie wymagają one zamykającego znaku procentowego, podobnie jak zmienne środowiskowe; musisz najpierw przypisać je do zmiennej środowiskowej (używając opóźnionego rozwijania!), a następnie wyodrębnić podłańcuch.
RolKau
Jest to nieuniknione brzydkie, jeśli chcesz zrobić coś z datami (np. Nazwy plików kopii zapasowych). Po zobaczeniu ogólnej brzydoty wiersza poleceń Windows, widzę, dlaczego Windows jest głównie wskaż i kliknij :) Chociaż mówią, że nowy PowerShell jest lepszy.
Halil Özgür
72

Polecenie FOR ! Chociaż nienawidzę pisania plików wsadowych, jestem za to wdzięczny.

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

analizuje każdą linię w pliku myfile.txt, ignorując linie rozpoczynające się średnikiem, przekazując drugi i trzeci token z każdej linii do ciała for, z tokenami oddzielonymi przecinkami i / lub spacjami. Zauważ, że dla instrukcji body referencja% i pozwala uzyskać drugi token,% j, aby uzyskać trzeci token, a% k, aby uzyskać wszystkie pozostałe tokeny po 3.

Możesz także użyć tego do iteracji katalogów, zawartości katalogu itp.

TheSoftwareJedi
źródło
4
Znalazłem, że pętle FOR plików wsadowych są ograniczone i okropne do napisania, ale czasami są przydatne.
23
2
Przepraszam za moje zdumienie, ale jak, u licha, jest to niewykorzystane? Myślę, że jeśli nie znasz pętli FOR, nie znasz skryptów wsadowych.
Kodowanie ze stylem
11
Niewykorzystane czy nie, to tortury. (Niektórzy twierdzą, że konieczne zło.)
harpo,
Musiałem go użyć kilka razy, a osoba, która wymyśliła tę składnię, powinna zostać zwolniona. Z armaty. W stronę słońca. To jest TAKIE złe.
Witalij
1
@CodingWithStyle: Za każdym razem, gdy muszę napisać pętlę for w pliku wsadowym, skrypt staje się programem uruchamiającym bash i zamiast tego przepisuje skrypt w bash (lub python)
:)
60

Zamiast zaśmiecać skrypt za pomocą linii REM lub ::, na górze każdego skryptu wykonuję następujące czynności:

@echo OFF
goto :START

Description of the script.

Usage:
   myscript -parm1|parm2 > result.txt

:START

Zwróć uwagę, jak możesz używać znaków potoku i przekierowania bez ucieczki przed nimi.

Patrick Mankiet
źródło
3
Byłoby jeszcze fajniej, gdybyś sprawdził% 1 dla „/?” a następnie możesz powtórzyć tę sekcję jako tekst pomocy.
demoncodemonkey
6
Hmm, umiesz programować wsadowo?!
Muhammad Alkarouri
54

Ścieżka (z dyskiem), w której znajduje się skrypt: ~ dp0

set BAT_HOME=%~dp0
echo %BAT_HOME%
cd %BAT_HOME%
RealHowTo
źródło
Zwykle używam do tego% CD%. Może nie jest dostępny we wszystkich wersjach powłoki DOS?
Saul Dolgin
11
% CD% to katalog bieżący, a% ~ dp0 to katalog, w którym znajduje się działający skrypt.
RealHowTo
Nie sądzę też, żeby% CD% istniało przed ... XP, może. Wiem, że niektóre starsze wersje systemu Windows go nie mają.
Thomas Owens
1
Zamiast tego należy użyć cd / d% BAT_HOME%, jeśli bat znajduje się na innym dysku. Jeśli dobrze pamiętam, nie zadziała to jednak ze starszymi DOS-ami.
ketorin
cd lub pushd% BATH_HOME% nie będzie działać, jeśli uruchomisz partię na ścieżce sieciowej.
Benoit,
49

Fragment% ~ dp0 został już wspomniany, ale w rzeczywistości jest więcej: znak (i) po ~ definiują wyodrębniane informacje.
Brak litery powoduje zwrócenie nazwy pliku poprawki
d - zwraca literę dysku
p - zwraca ścieżkę
s - zwraca krótką ścieżkę
x - zwraca rozszerzenie pliku
Więc jeśli wykonasz skrypt test.bat poniżej z c: \ Temp \ długa nazwa katalogu \ folder,

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

otrzymujesz następujące dane wyjściowe

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

A jeśli parametr zostanie przekazany do skryptu, jak w
teście c: \ temp \ mysrc \ test.cpp,
te same manipulacje można wykonać za pomocą zmiennej% 1.

Ale wynik rozszerzenia% 0 zależy od lokalizacji!
Na „najwyższym poziomie” partii rozwija się do bieżącej nazwy pliku partii.
W funkcji (wywołaniu) rozwija się do nazwy funkcji.

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

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

Dane wyjściowe to (plik wsadowy jest uruchamiany z myBatch.bat)

myBatch.bat
:test
:test
myBatch
Hartmut
źródło
43

Używając CALL, EXIT / B, SETLOCAL i ENDLOCAL możesz implementować podprogramy ze zmiennymi lokalnymi.

przykład:

@echo off

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

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

To zostanie wydrukowane

11
xxxxx

nawet jeśli: sub modyfikuje x.

Ferruccio
źródło
6
Powinieneś raczej użyć goto: eof zamiast exit / b, robi to samo, ale jest to bardziej standardowy sposób.
Philibert Perusse
2
Jest na to standard? O_o
Paulius
3
Mój błąd. Myślałem, że masz na myśli wyraźne zdefiniowanie etykiety: eof i zrobienie z tego goto. Nie zdawałem sobie sprawy, że istnieje domniemana etykieta eof na końcu każdego pliku wsadowego.
Ferruccio,
3
Jeśli jednak chcesz, aby podprogram ustawiał poziom błędu, musisz użyć wyjścia / b. Na przykład: exit / b 3
Chris Noe
6
Uważam, że najlepiej jest użyć „exit / B” zamiast „goto: eof” w celu powrotu z podprogramu, „goto: eof” ma problem z tym, że możesz zwrócić kod błędu, gdy chcesz go połknąć. Na przykład, jeśli użyjesz „jeśli istnieje echo someFile, jest tutaj”, ustawi to poziom błędu, jeśli jakiś plik nie istnieje, ale to nie jest zły i nie jest to kod błędu, który chciałbyś zwrócić (czyli co ” goto: eof "zrobiłby).
Scott Langham,
42

Podstępna sztuczka, aby czekać N sekund (nie jest częścią cmd.exe, ale nie jest dodatkowym oprogramowaniem, ponieważ jest dostarczana z Windows), zobacz linię ping. Potrzebujesz pingów N + 1, ponieważ pierwszy ping gaśnie bez opóźnień.

    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
paxdiablo
źródło
2
Jeszcze lepiej jest umieścić to w pliku takim jak sleep.bat, aby zaoszczędzić ci kłopotu z przepisywaniem go w kółko.
erjiang
1
... i umieść sleep.bat w jakimś katalogu w zmiennej środowiskowej PATH
Scoregraphic
Jestem przeciwny wystawianiu tego na zewnątrz, czyni mniej przenośnym ... w systemach Windows.
sorin
37

Ucieczka przed „hydrauliką”:

echo ^| ^< ^> ^& ^\ ^^
Chris Noe
źródło
3
Założę się, że postać ucieczki DOS nie jest dobrze znana. Dobry.
Joshua
12
Ach, to by tłumaczyło, dlaczego jest to również operator kontynuacji linii - ucieka przed nową linią, tak jak \ w bash ...
leander
@leander: Tak, ale może tylko uciec z LF (a nie CR), ponieważ wszystkie CR są usuwane przed
jeb
Tak to jest, dlaczego za pomocą git na Windows do diff stosunku do poprzedniego commit ( HEAD^) jest problematyczne.
Daniel Trebbien
31

Zdolność do uruchamiania poleceń i przetwarzania danych wyjściowych (takich jak backticks z „$ ()” w bash).

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

Jeśli w nazwach plików są spacje, użyj tego:

for /f "tokens=*" %i in ('dir /on /b *.jpg') do echo --^> %i
paxdiablo
źródło
2
Nie działa z nazwami plików, które mają spacje w swoich nazwach ... To działa: for / f "tokens = *"% i in ('dir / on / b * .jpg') do echa - ^>% i
doekman,
Dobry chwyt Osobiście uważam, że spacje w nazwach plików są złymi, ohydnymi rzeczami z głębin dziewiątego kręgu piekła. Ale chyba powinniśmy się nimi zająć.
paxdiablo,
To najbardziej szalona składnia, jaką widziałem. Czy to działa, jeśli wykonałeś backtick.bat i przekazałeś ciąg?
idbrii
30

Tworzenie pustego pliku:

> copy nul filename.ext
nzpcmad
źródło
6
@devio: echo. stawia pustą linię. aby plik nie był pusty!
Paulius
4
Używam type nul > filename.extdo tego.
Benoit
Fajnie zastanawiałem się, czy przez długi czas istniał odpowiednik dotyku.
jdelator
Zawsze używałemren > blah.txt
Synetech
28

Aby ukryć wszystkie dane wyjściowe polecenia, przekieruj do> nul 2> & 1.

Na przykład niektóre programy wiersza polecenia wyświetlają dane wyjściowe, nawet jeśli przekierujesz do> nul. Ale jeśli przekierujesz dane wyjściowe jak w poniższym wierszu, wszystkie dane wyjściowe zostaną stłumione.

PSKILL NOTEPAD >nul 2>&1

EDYCJA: Zobacz Ignorowanie danych wyjściowych polecenia, aby uzyskać wyjaśnienie, jak to działa.

aforii
źródło
1
Czy wiesz jak to działa? Jakie jest znaczenie 2> i 1 bit?
Scott Langham,
12
> Nul przekierowuje STDOUT na nul. 2> i 1 przekierowuje STDERR tam, gdzie wskazuje STDOUT.
aforia,
W szczególności myślę, że 2> i 1 to „klon uchwytu pliku”, ustawiając STDERR na klon STDOUT. Umieszczenie go po> NUL jest ważne, ponieważ chcesz sklonować STDOUT po przekierowaniu, a nie wcześniej. (Proszę mnie poprawić, jeśli się tu mylę.)
Leander
1
Jeśli zastanawiasz się, skąd pochodzi PSKILL, sprawdź sysinternals.com . Jeśli korzystasz z wersji Pro, powinieneś mieć natywną komendę TSKILL, która jest mniej więcej taka sama.
Coding With Style
1
Jeśli nie masz umiejętności Pskill lub Tskill, większość systemów Windows, z których korzystałem, pochodzi z taskkill.
idbrii
25
PAUSE

Zatrzymuje wykonanie i wyświetla następujący monit:

Naciśnij dowolny klawisz, aby kontynuować . . .

Przydatne, jeśli chcesz uruchomić partię, klikając ją dwukrotnie w Eksploratorze Windows i chcesz zobaczyć dane wyjściowe, a nie tylko flash okna poleceń.

kruk
źródło
Z trudem nazwałbym to „niewykorzystanym”, ponieważ oznaczam to na końcu każdego napisanego przeze mnie skryptu. Z drugiej strony, to nie działa tak dobrze, jeśli chcesz, aby IDE uruchomiło skrypt i przechwyciło dane wyjściowe, ponieważ IDE zwykle nie ma możliwości naciśnięcia klawisza Enter, zwykle ...
Nicholas Flynt,
15
Jedną z ciekawych cech „pauzy” jest to, że jeśli w pobliżu nie ma terminala, który mógłby odebrać „dowolny klucz” (np. Jeśli plik wsadowy jest uruchamiany z usługi systemowej), wykrywa to i po prostu kontynuuje ...
leander
4
+1 dla Charliego Somerville, jest to tak znane, że każdy programista go.bat używał go już na początku lat 90.
LiraNuna,
6
Zamiast zanieczyszczać wszystkie pliki wsadowe (i sprawiać, że są denerwujące dla maniaków CLI), możesz użyć Start / Run /, a następnie wpisać „cmd / k” i nazwę pliku wsadowego. LUB zmień domyślny ciąg HKCR \ batfile \ shell \ open \ na „cmd / k"% 1 "% * '. LUB utwórz kolejny plik wsadowy, który po prostu uruchamia „@cmd / k $ *”, umieść go na pulpicie i upuść na nim inne pliki wsadowe. Istnieje wiele alternatyw dla PAUZY. Proszę, rozważ je.
system PAUSE
1
@gnud: nadal możesz potokować do skryptu: echo.|batch-with-pause.batbędzie miał taki sam efekt, jak naciśnięcie „dowolnego klawisza” ...
Kurt Pfeifle
25

Odpowiednik bash (i innych powłok)

echo -n Hello # or
echo Hello\\c

która wypisuje „ Hello” bez końcowego znaku nowej linii. Hack cmd, aby to zrobić:

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

set /pto sposób na monitowanie użytkownika o wprowadzenie danych. Emituje podany ciąg, a następnie czeka (w tym samym wierszu, tj. Bez CRLF) na wpisanie przez użytkownika odpowiedzi.

<nulpo prostu potokuje pustą odpowiedź na set /ppolecenie, więc wynikiem netto jest emitowany ciąg zachęty. (Zastosowana zmienna pozostaje niezmieniona z powodu pustej odpowiedzi).

Problemy są następujące: Wyprowadzenie wiodącego znaku równości nie jest możliwe, a w systemie Vista wiodące białe znaki są usuwane, ale nie na XP.

paxdiablo
źródło
18

Wyszukaj i zamień podczas ustawiania zmiennych środowiskowych:

> @set fname=%date:/=%

... usuwa „/” z daty do użycia w nazwach plików ze znacznikami czasu.

i podciągi też ...

> @set dayofweek=%fname:~0,3%
SqlACID
źródło
17

Arytmetyka liczb całkowitych:

> SET /A result=10/3 + 1
4
Chris Noe
źródło
Jak długo SET ma możliwość obliczania? Windows XP?
chakrit
1
Jeśli pytasz, jak duże mogą być te wartości, uważam, że jest to wersja 32-bitowa. A więc +/- 2 miliardy.
Chris Noe,
1
Myślę, że pytanie brzmiało: jak długo SET był w stanie obliczyć? Od Windows XP?
Michael Myers
3
Wydaje mi się, że zestaw CMD.EXE był w stanie obliczyć od wersji NT 3.1. Minęło dużo czasu, zanim ktoś zauważył, że CMD.EXE nie jest dokładnie taki sam jak COMMAND.COM ...
RBerteig
16

Separatory poleceń:

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

W drugim wierszu polecenie po && działa tylko wtedy, gdy pierwsze polecenie zakończy się powodzeniem.

W 3. linii polecenie po || działa tylko wtedy, gdy pierwsze polecenie nie powiodło się.

doekman
źródło
15

Wypisz pusty wiersz:

echo.
paxdiablo
źródło
15

Możesz połączyć łańcuchy instrukcji if, aby uzyskać efekt podobny do zwarcia logicznego „i”.

if foo if bar baz
Jacek
źródło
1
To naprawdę tylko skrót do zagnieżdżania ifs: if foo ( if bar ( baz ) )(Wyobraź sobie
znaki
14

Aby szybko przekonwertować plik tekstowy Unicode (16bit / char) na plik ASCII DOS (8bit / char).

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

jako bonus, jeśli to możliwe, postacie są poprawnie zmapowane.

RealHowTo
źródło
1
To jest plik ANSI DOS - ASCII to 7bit / char.
MarkJ
Lol, ten jest anty-wzorem, ta konwersja jest wysoce prawdopodobna do niepowodzenia. Jedynym 8-bitowym kodowaniem obsługującym Unicode jest UTF-8, ale dzięki M $ nie można ustawić strony kodowej UTF-8 w systemie Windows.
sorin
14

jeśli struktura bloku:

if "%VS90COMNTOOLS%"=="" (
  echo: Visual Studio 2008 is not installed
  exit /b
)
Ferruccio
źródło
3
Dopóki masz świadomość, że zmienne będą rozwijane za jednym razem (bez opóźnionego rozwijania) - tzn. Nie możesz rozsądnie używać% ERRORLEVEL%.
Duncan Smart
Nie można również używać tam etykiet (w tym komentarzy w stylu ::), ponieważ przedwcześnie zakończy instrukcję if.
Kodowanie ze stylem
2
@ Duncan: I tak nie powinieneś używać pseudo-zmiennej %ERRORLEVEL%; po to if errorlevel <foo>jest. I że robi w rzeczywistości pracy w takich bloków.
Joey,
12

Opóźnione rozwinięcie zmiennych (z podciągnięciami dla dokładności):

    @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
paxdiablo
źródło
12

Nie zapewnia dużej funkcjonalności, ale możesz użyć polecenia tytuł do kilku zastosowań, takich jak zapewnienie statusu długiego skryptu na pasku zadań lub po prostu w celu zwiększenia opinii użytkowników.

@title Searching for ...
:: processing search
@title preparing search results
:: data processing
Hartmut
źródło
2
Ciekawy. Chociaż później najwyraźniej tracisz zwykłą funkcję, która polega na pokazywaniu aktualnie uruchomionego polecenia. Czy można to zresetować?
Chris Noe,
2
technet.microsoft.com/en-us/library/bb491017.aspx mówi, że można go zresetować z „tytułem” samodzielnie, ale wydaje się, że to nie działa w systemie Windows 7 ...
ℳ.
11

Nie masz pod ręką edytora i musisz utworzyć plik wsadowy?

copy con test.bat

Po prostu wpisz polecenia i naciśnij klawisz Enter, aby wyświetlić nowy wiersz. Naciśnij Ctrl-Z i Enter, aby zamknąć plik.

Hartmut
źródło
4
Heh, to zabiera mnie z powrotem.
Kodowanie ze stylem
11

Przykładem strun na odejmowanie datei timeuzyskać plik o nazwie „YYYY-MM-DD HH: MM: SS.txt”

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

Używam, coloraby wskazać, czy mój skrypt zakończył się sukcesem, nie powiódł się, czy też muszę wprowadzić dane, zmieniając kolor tekstu i tła. To naprawdę pomaga, gdy masz maszynę w zasięgu wzroku, ale dość daleko

kolor XY

gdzie X i Y to wartość szesnastkowa od 0do F, gdzie X - tło, Y - tekst, gdy X = Y kolor się nie zmieni.

kolor Z

zmienia kolor tekstu na „Z” i ustawia czarne tło, „kolor 0” nie będzie działać

dla nazw kolorów zadzwoń

kolor ?

MoreThanChaos
źródło
edytowane; _ zostały zinterpretowane kursywą. Niezły kawałek kodu.
@Duncan Smart: nieprawda, działa również w języku angielskim w Wielkiej Brytanii (chociaż technicznie powinien to być „kolor”, grrr)
demoncodemonkey
10

Pełna kontrola nad danymi wyjściowymi za pomocą odstępów i znaków zmiany znaczenia:

echo.    ^<resourceDir^>/%basedir%/resources^</resourceDir^>
paxdiablo
źródło
1
Jak to działa? Kropka wyznacza początek tekstu wyjściowego?
Chris Noe
3
„echo. x” wyświetli „<space> x”, „echo x” wyświetli tylko „x”. Pozwala to na wprowadzanie spacji. Ponadto znak zmiany znaczenia „^” nie pozwoli cmd pomyśleć, że wszystkie znaki „<” i „>” to przekierowanie we / wy.
paxdiablo
1
echo (jest lepszy, ponieważ echo tworzy przeszukiwanie pliku dla pliku o nazwie „echo”, jeśli ten plik istnieje echo nie powiedzie się, jeśli nie to wewnętrzne echo jest wykonywane, ale jest wolniejszy niż echo (..
Jeb
9

SoftwareSedi wspomniał już o poleceniu for, ale powiem o nim ponownie, ponieważ jest bardzo potężny.

Poniższe dane wyjściowe przedstawiają bieżącą datę w formacie RRRRMMDD, używam jej do generowania katalogów kopii zapasowych.

for /f "tokens=2-4 delims=/- " %a in ('DATE/T') do echo %c%b%a
ponownie
źródło
2
Na pewno DATE / T zwraca 29.10.2008 w Europie i 29.10.2008 w USA ... więc może być wymagana pewna lokalizacja! ;-)
Zgadza się! Możesz jednak nadużyć polecenia date, aby dowiedzieć się, który format daty jest używany.
przemieniono
4
To nadmierne użycie FOR, imo. Myślę, że po prostu użyłbym do tego% DATE: ~ 10,4 %% DATE: ~ 4,2 %% DATE: ~ 7,2% zamiast uruchamiać komendę date, a następnie analizować.
Kodowanie ze stylem