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?)
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
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ś".
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.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
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
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...
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.
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%
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
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.
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
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 ^| ^< ^> ^& ^\ ^^
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
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
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.
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ń.
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.
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%
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
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ę.
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.
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
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.
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
)
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
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
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.
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 ?
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^>
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
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