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? )
windows
batch-file
hidden-features
Chris Noe
źródło
źródło
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 uruchomC:\WINDOWS\system32\ntbackup.exe /?
.Przechodzi do katalogu określonego ścieżką .
Przenosi Cię z powrotem do katalogu, z którego „wypchnąłeś”.
źródło
Nie jestem pewien, jak przydatne byłoby to w pliku wsadowym , ale jest to bardzo wygodne polecenie do użycia w wierszu polecenia:
Spowoduje to otwarcie Eksploratora Windows w folderze „some_directory”.
Uważam, że to świetna oszczędność czasu.
źródło
open .
robi to samo.start
robi 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.Zawsze miałem trudności z czytaniem komentarzy oznaczonych słowem kluczowym w każdej linii:
Łatwiej czytać:
źródło
rem
jest 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.goto :
aby przejść do etykiety.:-)
igoto -)
będzie również działać.Zmienne podciągi:
źródło
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.Polecenie FOR ! Chociaż nienawidzę pisania plików wsadowych, jestem za to wdzięczny.
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.
źródło
Zamiast zaśmiecać skrypt za pomocą linii REM lub ::, na górze każdego skryptu wykonuję następujące czynności:
Zwróć uwagę, jak możesz używać znaków potoku i przekierowania bez ucieczki przed nimi.
źródło
Ścieżka (z dyskiem), w której znajduje się skrypt: ~ dp0
źródło
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,
otrzymujesz następujące dane wyjściowe
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.
Dane wyjściowe to (plik wsadowy jest uruchamiany z myBatch.bat)
źródło
Używając CALL, EXIT / B, SETLOCAL i ENDLOCAL możesz implementować podprogramy ze zmiennymi lokalnymi.
przykład:
To zostanie wydrukowane
nawet jeśli: sub modyfikuje x.
źródło
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ń.
źródło
Ucieczka przed „hydrauliką”:
źródło
HEAD^
) jest problematyczne.Zdolność do uruchamiania poleceń i przetwarzania danych wyjściowych (takich jak backticks z „$ ()” w bash).
Jeśli w nazwach plików są spacje, użyj tego:
źródło
Tworzenie pustego pliku:
źródło
type nul > filename.ext
do tego.ren > blah.txt
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.
EDYCJA: Zobacz Ignorowanie danych wyjściowych polecenia, aby uzyskać wyjaśnienie, jak to działa.
źródło
taskkill
.Zatrzymuje wykonanie i wyświetla następujący monit:
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ń.
źródło
echo.|batch-with-pause.bat
będzie miał taki sam efekt, jak naciśnięcie „dowolnego klawisza” ...Odpowiednik bash (i innych powłok)
która wypisuje „
Hello
” bez końcowego znaku nowej linii. Hack cmd, aby to zrobić:set /p
to 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.<nul
po prostu potokuje pustą odpowiedź naset /p
polecenie, 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.
źródło
Wyszukaj i zamień podczas ustawiania zmiennych środowiskowych:
... usuwa „/” z daty do użycia w nazwach plików ze znacznikami czasu.
i podciągi też ...
źródło
Arytmetyka liczb całkowitych:
źródło
Separatory poleceń:
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ę.
źródło
Wypisz pusty wiersz:
źródło
Możesz połączyć łańcuchy instrukcji if, aby uzyskać efekt podobny do zwarcia logicznego „i”.
źródło
if foo ( if bar ( baz ) )
(Wyobraź sobieAby szybko przekonwertować plik tekstowy Unicode (16bit / char) na plik ASCII DOS (8bit / char).
jako bonus, jeśli to możliwe, postacie są poprawnie zmapowane.
źródło
jeśli struktura bloku:
źródło
%ERRORLEVEL%
; po toif errorlevel <foo>
jest. I że robi w rzeczywistości pracy w takich bloków.Opóźnione rozwinięcie zmiennych (z podciągnięciami dla dokładności):
źródło
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.
źródło
Nie masz pod ręką edytora i musisz utworzyć plik wsadowy?
Po prostu wpisz polecenia i naciśnij klawisz Enter, aby wyświetlić nowy wiersz. Naciśnij Ctrl-Z i Enter, aby zamknąć plik.
źródło
Przykładem strun na odejmowanie
date
itime
uzyskać plik o nazwie „YYYY-MM-DD HH: MM: SS.txt”Używam,
color
aby 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ść dalekogdzie X i Y to wartość szesnastkowa od
0
doF
, gdzie X - tło, Y - tekst, gdy X = Y kolor się nie zmieni.zmienia kolor tekstu na „Z” i ustawia czarne tło, „kolor 0” nie będzie działać
dla nazw kolorów zadzwoń
źródło
Pełna kontrola nad danymi wyjściowymi za pomocą odstępów i znaków zmiany znaczenia:
źródło
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.
źródło