Długie polecenia dzielone na wiele linii w Windows Vista batch (.bat) plik
Jak sprawić, by długie polecenia przechodziły przez wiele linii w pliku wsadowym Windows (Vista)?
5 answers
Możesz rozbijać długie linie za pomocą karetki ^
, o ile pamiętasz, że karetka i następująca po niej nowa linia są całkowicie usunięte. Jeśli więc powinna istnieć przestrzeń, w której łamiesz linię, Dołącz spację. (więcej na ten temat poniżej.)
Przykład:
copy file1.txt file2.txt
Zostałoby zapisane jako:
copy file1.txt^
file2.txt
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
2017-11-06 16:24:20
Zasada dla karetki brzmi:
Karetka na końcu linii dołącza następny wiersz, pierwszy znak dołączonej linii zostanie uniknięty.
Można używać karetki wiele razy, ale pełna linia nie może przekraczać maksymalnej długości linii ~8192 znaków (Windows XP, Windows Vista i Windows 7).
echo Test1
echo one ^
two ^
three ^
four^
*
--- Output ---
Test1
one two three four*
echo Test2
echo one & echo two
--- Output ---
Test2
one
two
echo Test3
echo one & ^
echo two
--- Output ---
Test3
one
two
echo Test4
echo one ^
& echo two
--- Output ---
Test4
one & echo two
Aby powstrzymać ucieczkę następnego znaku, możesz użyć przekierowania.
Przekierowanie musi być tuż przed karetką. Ale istnieje jeden ciekawość z przekierowaniem przed karetką.
Jeśli umieścisz token na karetce, token zostanie usunięty.echo Test5
echo one <nul ^
& echo two
--- Output ---
Test5
one
two
echo Test6
echo one <nul ThisTokenIsLost^
& echo two
--- Output ---
Test6
one
two
I możliwe jest również osadzenie kanałów linii w łańcuchu:
setlocal EnableDelayedExpansion
set text=This creates ^
a line feed
echo Test7: %text%
echo Test8: !text!
--- Output ---
Test7: This creates
Test8: This creates
a line feed
Pusta linia jest ważna dla sukcesu. Działa to tylko z opóźnionym rozszerzeniem, w przeciwnym razie reszta linii jest ignorowana po podaniu linii.
To działa, ponieważ karetka na końcu linii ignoruje następny kanał linii i ucieka następny znak, nawet jeśli następny znak jest również kanałem linii (zwroty karetki są zawsze ignorowane w tej fazie).
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
2018-08-24 19:56:57
(jest to w zasadzie przepisanie Odpowiedzi Wayne ' a, ale z zamieszaniem wokół karetki wyjaśnione. Więc wrzuciłem to jako CW. Nie wstydzę się edytować odpowiedzi, ale całkowicie przepisywanie ich wydaje się niestosowne.)
Możesz rozbijać długie linie za pomocą karetki (^
), pamiętaj tylko, że karetka i następująca po niej nowa linia są usuwane całkowicie z polecenia, więc jeśli umieścisz ją tam, gdzie byłaby wymagana spacja (np. pomiędzy parametrami), należy również podać spację (albo przed ^
, albo na początku następnej linii - ten drugi wybór może pomóc wyjaśnić, że jest to kontynuacja).
Przykłady: (wszystkie przetestowane na Windows XP i Windows 7)
xcopy file1.txt file2.txt
Można zapisać jako:
xcopy^
file1.txt^
file2.txt
Lub
xcopy ^
file1.txt ^
file2.txt
Lub nawet
xc^
opy ^
file1.txt ^
file2.txt
(to ostatnie działa, ponieważ nie ma spacji na xc
i ^
i nie ma spacji na początku następnego Kolejka Więc kiedy usuniesz ^
i nową linię, otrzymasz...xcopy
.)
Dla czytelności i zdrowego rozsądku najlepiej jest rozbijać tylko między parametrami (pamiętaj, aby uwzględnić spację).
Upewnij się, że ^
jest , a nie ostatnią rzeczą w pliku wsadowym, ponieważ wydaje się być poważnym problemem z tym.
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
2017-05-23 11:54:50
Wiele poleceń może być umieszczonych w nawiasie i rozłożonych na liczne linie; więc coś w rodzaju echo hi && echo hello
można umieścić w następujący sposób:
( echo hi
echo hello )
Również zmienne mogą pomóc:
set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE"
if exist %AFILEPATH% (
start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING...
) else (
...
Zauważyłem również z carets (^
), że if
warunkowość lubiła, że podąża za nią tylko wtedy, gdy występuje przestrzeń:
if exist ^
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
2016-02-12 19:55:11
Wydaje się jednak, że dzielenie W Środku wartości pętli for nie wymaga karetki (a w rzeczywistości próba jej użycia będzie uważana za błąd składni). Na przykład,
for %n in (hello
bye) do echo %n
Zauważ, że nie jest potrzebna spacja nawet po "hello" lub "before".
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
2014-08-24 11:07:50