Ukryte funkcje plików wsadowych systemu Windows

Jakie są niektóre z mniej znanych, ale ważnych i przydatnych funkcji 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 native functionality , tzn. nie wymaga dodatkowego oprogramowania, np. Windows Resource Kit

Wyjaśnienie: odnosimy się tutaj do skryptów, które są przetwarzane przez cmd.exe, który jest domyślny w wariantach WinNT.

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

Author: Chris Noe, 2008-10-29

30 answers

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
 185
Author: Chris Noe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-07 18:00:54
PUSHD path

Prowadzi do katalogu określonego przez path .

POPD

Przenosi cię z powrotem do katalogu, z którego "wypchnąłeś".

 150
Author: raven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-06 12:49:38

Nie wiem, jak przydatne byłoby to w pliku batch, 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.
 109
Author: LeopardSkinPillBoxHat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 02:54:07

Zawsze trudno było odczytać komentarze, które są oznaczone słowem kluczowym w każdej linii:

REM blah blah blah

Łatwiejszy do odczytania:

:: blah blah blah
 87
Author: Chris Noe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 00:35:13

Zmienne podciągi:

> set str=0123456789
> echo %str:~0,5%
01234
> echo %str:~-5,5%
56789
> echo %str:~3,-3%
3456
 79
Author: Chris Noe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 00:41:33

Komenda FOR ! Chociaż nienawidzę pisać plików wsadowych, jestem za to wdzięczny.

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

Przetworzy każdą linię w myfile.txt, ignorując linie rozpoczynające się średnikiem, przekazując 2. i 3. token z każdej linii do ciała for, ze znakami oddzielonymi przecinkami i / lub spacjami. Zwróć uwagę, że polecenia for body odnoszą się do %i, aby uzyskać 2. token, %j, aby uzyskać 3. token, a %k, aby uzyskać wszystkie pozostałe tokeny po 3. tokenie.

Możesz również użyć tego do iteracji katalogi, zawartość katalogów itp...

 72
Author: TheSoftwareJedi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 00:57:21

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

@echo OFF
goto :START

Description of the script.

Usage:
   myscript -parm1|parm2 > result.txt

:START

Zauważ, jak możesz używać znaków rurowych i przekierowujących bez uciekania się do nich.

 60
Author: Patrick Cuff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-03 20:41:04

Ścieżka (z napędem) gdzie znajduje się skrypt: ~dp0

set BAT_HOME=%~dp0
echo %BAT_HOME%
cd %BAT_HOME%
 54
Author: RealHowTo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 00:39:01

Kawałek %~dp0 był już wspominany, ale jest w tym coś więcej: znak(y) po ~ definiują informacje, które są wyodrębniane.
Brak litery powoduje zwrócenie nazwy pliku łaty
d-zwraca literę dysku
p-zwraca ścieżkę
s-zwraca krótką ścieżkę
x-zwraca rozszerzenie pliku
Więc jeśli wykonasz test skryptu.nietoperz poniżej z c:\Temp\long nazwa katalogu\ folder,

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

Otrzymujesz następujące wyjście

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

I jeśli parametr zostanie przekazany do skryptu tak jak w
badanie 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 rozszerza się do bieżącej nazwy pliku wsadowego.
W funkcji (wywołaniu) rozszerza się do nazwy funkcji.

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

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

Wyjściem jest (plik Batch jest uruchamiany przez myBatch.bat)

myBatch.bat
:test
:test
myBatch
 49
Author: 3 revs, 2 users 75%Hartmut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-17 12:25:56

Używając CALL, EXIT / B, SETLOCAL & ENDLOCAL możesz zaimplementować 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 wydrukuje

11
xxxxx

Mimo ,że: sub modyfikuje x.

 43
Author: Ferruccio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 04:21:57

Podstępna sztuczka, aby czekać N sekund (nie jest częścią cmd.exe, ale nie jest dodatkowym oprogramowaniem, ponieważ pochodzi z Windows), patrz linia ping. Potrzebujesz N + 1 pingów, ponieważ pierwszy ping wychodzi bez opóźnienia.

    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
 42
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 01:09:02

Wyjście z "kanalizacji":

echo ^| ^< ^> ^& ^\ ^^
 37
Author: Chris Noe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-31 16:45:47

Możliwość uruchamiania poleceń i przetwarzania danych wyjściowych(jak backticki '$ () ' 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
 31
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-07 18:27:05

Tworzenie pustego pliku:

> copy nul filename.ext
 30
Author: nzpcmad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-03 16:33:15

Aby ukryć wszystkie dane z polecenia, przekieruj na >nul 2 > & 1.

Na przykład niektóre programy wiersza poleceń wyświetlają wyjście nawet jeśli przekierujesz do >nul. Ale jeśli przekierujesz wyjście, jak w poniższej linii, Wszystkie wyjście zostanie stłumione.

PSKILL NOTEPAD >nul 2>&1

EDIT: Zobacz ignorowanie wyjścia polecenia , aby dowiedzieć się, jak to działa.

 28
Author: aphoria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-02 18:31:39
PAUSE

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

Press any key to continue . . .

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

 25
Author: raven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-30 14:50:36

Odpowiednik bash (i innych powłok)

echo -n Hello # or
echo Hello\\c

, który wyświetla "Hello " Bez kończącego się znaku nowego wiersza. Cmd hack do tego:

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

set /p jest sposobem na poproszenie użytkownika o wprowadzenie danych. Emituje podany łańcuch i czeka (w tej samej linii, tzn. bez CRLF), aż użytkownik wpisze odpowiedź.

<nul po prostu wysyła pustą odpowiedź na polecenie set /p, więc wynikiem netto jest wyemitowany łańcuch zachęty. (Użyta zmienna pozostaje bez zmian z powodu pustego reponse.)

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

 25
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-06 00:21:35

Wyszukiwanie i zamiana podczas ustawiania zmiennych środowiskowych:

> @set fname=%date:/=%

...usuwa " / " z Daty do użycia w nazwach plików z oznaczeniem czasu.

I podciągi też...

> @set dayofweek=%fname:~0,3%
 18
Author: SqlACID,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-03 16:37:08

Arytmetyka całkowita:

> SET /A result=10/3 + 1
4
 17
Author: Chris Noe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 00:44:28

Separatory poleceń:

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

W drugiej linii, polecenie po & & jest uruchamiane tylko wtedy, gdy pierwsze polecenie się powiedzie.

W trzeciej linii polecenie po | / uruchamia się tylko wtedy, gdy pierwsze polecenie nie powiodło się.

 16
Author: doekman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-10 20:33:40

Wypisuje pustą linię:

echo.
 15
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 01:30:33

Można łączyć polecenia if, aby uzyskać efekt jak zwarcie boolean 'and'.

if foo if bar baz
 15
Author: Jack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-31 01:55:01

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, znaki są poprawnie odwzorowane.

 14
Author: RealHowTo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 02:48:32

If Block structure:

if "%VS90COMNTOOLS%"=="" (
  echo: Visual Studio 2008 is not installed
  exit /b
)
 14
Author: Ferruccio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 04:13:57

Opóźnione Rozszerzanie zmiennych (z podciągami wrzuconymi na dobrą miarę):

    @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
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 00:56:02

Nie zapewnia dużej funkcjonalności, ale możesz użyć polecenia title do kilku zastosowań, takich jak podawanie statusu na długim skrypcie 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
 12
Author: Hartmut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-04 20:14:07

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

copy con test.bat

Po prostu wpisz polecenia, naciśnij enter, aby wyświetlić nową linię. Naciśnij Ctrl-Z I Enter, aby zamknąć plik.

 11
Author: Hartmut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 00:09:15

Przykład odejmowania ciągu znaków na date i time, Aby uzyskać 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 color, aby wskazać, czy mój skrypt kończy się pomyślnie, nie powiodło się lub wymaga wprowadzenia przez zmianę koloru tekstu i tła. To naprawdę pomaga, gdy masz jakąś maszynę w zasięgu wzroku, ale dość daleko]}

Color XY

Gdzie X i Y jest wartością szesnastkową od 0 do F, gdzie x-Tło, Y-tekst, gdy X = Y kolor nie zmieni się.

Kolor Z

Zmienia kolor tekstu na ' Z ' i ustawia czarne tło,' kolor 0 ' nie będzie działać

Dla nazw kolorów call

Kolor ?

 11
Author: MoreThanChaos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-28 05:41:12

Całkowita kontrola nad wyjściami ze znakami odstępów i znaków specjalnych.:

echo.    ^<resourceDir^>/%basedir%/resources^</resourceDir^>
 10
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-24 17:06:26

TheSoftwareJedi już wspomniał o komendzie for, ale wspomnę o niej jeszcze raz, ponieważ jest bardzo potężna.

Poniżej wypisuje bieżącą datę w formacie YYYYMMDD, używam tego przy generowaniu katalogów dla kopii zapasowych.

for /f "tokens=2-4 delims=/- " %a in ('DATE/T') do echo %c%b%a
 9
Author: remonedo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-03 16:35:39