Jak mogę podzielić długie polecenia na wiele wierszy w pliku wsadowym?
batch-file
Ondra Žižka
źródło
źródło
^
i po tekście polecenia.echo
edytowany.co^␍py ^␍file1 ^␍file2
. Sugeruję usunięcie komentarza, aby uniknąć nieporozumień, zwłaszcza że ten quest jest tak popularnyReguła dla karetki jest następująca:
Daszek na końcu linii dołącza następny wiersz, pierwszy znak dołączonej linii zostanie zastąpiony znakiem ucieczki.
Możesz używać karetki wiele razy, ale pełna linia nie może przekraczać maksymalnej długości ~ 8192 znaków (Windows XP, Windows Vista i Windows 7).
Aby powstrzymać ucieczkę następnej postaci, możesz użyć przekierowania.
Przekierowanie musi nastąpić tuż przed kursorem. Ale istnieje jedna ciekawość z przekierowaniem przed daszkiem.
Jeśli umieścisz token w karetce, token zostanie usunięty.
Możliwe jest także osadzanie kanałów w wierszu :
Pusta linia jest ważna dla sukcesu. Działa to tylko z opóźnionym rozwinięciem, w przeciwnym razie reszta linii zostanie zignorowana po przesunięciu wiersza.
Działa, ponieważ karetka na końcu linii ignoruje przejście do następnego wiersza i ucieka od następnego znaku, nawet jeśli następny znak jest również przesunięciem wiersza (powrót karetki jest zawsze ignorowany w tej fazie).
źródło
copy ^[newline]"file1.txt" ^[newline]"file2.txt"
nie działa! Musiałem dodać spację:copy ^[newline] "file1.txt" ^[newline] "file2.txt"
.(Jest to w zasadzie przepisanie odpowiedzi Wayne'a, ale z wyjaśnieniem zamieszania wokół karetki. Więc opublikowałem to jako CW. Nie boję się redagować odpowiedzi, ale całkowicie przepisanie ich wydaje się nieodpowiednie).
Możesz przełamać długie wiersze za pomocą znaku karetki (
^
), pamiętaj tylko, że karetka i następująca po niej nowa linia są całkowicie usuwane z polecenia, więc jeśli umieścisz ją w miejscu wymaganym spacji (np. Między parametrami), upewnij się, że aby uwzględnić również spację (albo przed^
, albo na początku następnego wiersza - ten ostatni wybór może pomóc uczynić go bardziej zrozumiałym, jest to kontynuacja).Przykłady: (wszystkie przetestowane na Windows XP i Windows 7)
można zapisać jako:
lub
lub nawet
(To ostatnie działa, ponieważ nie ma spacji między
xc
i^
, i nie ma spacji na początku następnego wiersza. Więc po usunięciu^
i i nowej linii, dostajesz ...xcopy
)Dla czytelności i rozsądku najlepiej jest przełamać tylko między parametrami (pamiętaj o spacji).
Upewnij się, że nie
^
jest to ostatnia rzecz w pliku wsadowym, ponieważ wydaje się, że jest z tym poważny problem .źródło
W nawiasie można umieścić wiele poleceń i rozłożyć je na wiele wierszy; więc coś takiego
echo hi && echo hello
można umieścić w ten sposób:Zmienne mogą również pomóc:
Zauważyłem też za pomocą tagów (
^
), żeif
warunkowe lubiły je śledzić tylko wtedy, gdy było spacje:źródło
cmd1.bat && cmd2.bat
różni się od formy parens: wykonaj poleceniecmd2.bat
iffcmd1.bat
wykonane pomyślnie (bez ustawienia%errorcode%
). Ta ostatnia forma jest wykonywana bezwarunkowo. Nieco nieoczekiwane (przynajmniej dla mnie) jest to, że oczywiście nie można użyć kombinacji obu +, tj. Dodać&&
przed podziałem linii.( echo <line break here> hello )
skutkuje pustą linią.Wydaje się jednak, że dzielenie w środku wartości pętli for nie wymaga karetki (i faktyczne próby użycia jednej z nich będą uważane za błąd składniowy). Na przykład,
Pamiętaj, że po przywitaniu lub pożegnaniu nie jest potrzebne żadne miejsce.
źródło
for
składni: separatory elementów w „for-set” to spacja, przecinek, średnik, znak równości, znak TAB i znaki nowej linii.do
część zawiera wieleif-else
instrukcji zagnieżdżonych ?