Czym jest wsadowy odpowiednik polecenia powłoki systemu Linux, echo -n
który pomija znak nowej linii na końcu danych wyjściowych?
Chodzi o to, aby pisać w tej samej linii w pętli.
windows
batch-file
cmd
newline
Gregseth
źródło
źródło
echo
to wziąć,-n
ale pocmd.exe
prostu nie zadziałało ^^echo
wziąć-n
” w kontekście pytania dotyczącego systemu Windows jest niepoprawny.Odpowiedzi:
Używając
set
i/p
parametru możesz echo bez nowej linii:Źródło
źródło
<nul set /p =Hello
.set /p
nie może powtórzyć znaku równości jako pierwszego znaku ani spacji / tabulatorów.< nul
to przekierowanie zNUL
urządzenia. Nie zawiera nic, ale to wystarczy,set /p
aby przestać czekać na dane wejściowe użytkownikaUżycie:
echo | set /p=
lub<NUL set /p=
oba będą działać, aby ukryć nowy wiersz.Jednak może to być bardzo niebezpieczne podczas pisania bardziej zaawansowanych skryptów, gdy sprawdzanie ERRORLEVEL staje się ważne, ponieważ ustawienie
set /p=
bez podania nazwy zmiennej spowoduje ustawienie ERRORLEVEL na 1.Lepszym rozwiązaniem byłoby po prostu użycie fikcyjnej nazwy zmiennej w następujący sposób:
echo | set /p dummyName=Hello World
Spowoduje to wytworzenie dokładnie tego, czego chcesz, bez żadnych podstępnych rzeczy w tle, ponieważ musiałem dowiedzieć się na własnej skórze, ale działa to tylko z wersją potokową;
<NUL set /p dummyName=Hello
nadal podniesie ERRORLEVEL do 1.źródło
Prosta metoda SET / P ma ograniczenia, które różnią się nieznacznie w zależności od wersji systemu Windows.
Wiodące cytaty mogą zostać usunięte
Wiodące białe miejsca mogą zostać usunięte
Prowadzenie
=
powoduje błąd składniowy.Więcej informacji można znaleźć na stronie http://www.dostips.com/forum/viewtopic.php?f=3&t=4209
jeb opublikował sprytne rozwiązanie, które rozwiązuje większość problemów w tekście wyjściowym bez podawania wiersza, nawet z wiodącą spacją lub = Udoskonaliłem metodę, aby mogła bezpiecznie wydrukować absolutnie dowolny prawidłowy ciąg wsadowy bez nowej linii, w dowolnej wersji systemu Windows od XP. Zauważ, że
:writeInitialize
metoda zawiera literał ciągu, który może nie być dobrze publikowany na stronie. Uwzględniono uwagę, która opisuje sekwencję znaków.:write
I:writeVar
metody zostały zoptymalizowane tak, że tylko ciągi znaków zawierające kłopotliwych prowadzące są zapisywane za pomocą mojego zmodyfikowaną wersję metody Copy Jeb za. Nieproblemowe ciągi są pisane przy użyciu prostszej i szybszej metody SET / P.źródło
ECHO.
, z wyjątkiemECHO.
, że może się nie powieść w nieznanych okolicznościach . Istnieje wiele innych form, które mogą się również nie powieść w mało znanych sytuacjach. Jedynym, który zawsze działa, jestECHO(
.Jako dodatek do odpowiedzi @ xmechanix zauważyłem, pisząc zawartość do pliku:
Że doda to dodatkową spację na końcu drukowanego łańcucha , co może być niewygodne, zwłaszcza, że staramy się unikać dodawania nowej linii (innego znaku spacji) na końcu łańcucha.
Na szczęście cytuje ciąg do wydrukowania, tj. Przy użyciu:
Wydrukuje ciąg bez znaku nowej linii lub spacji na końcu.
źródło
World
i>
...set /p="abc"<nul|xxd -p
wyświetlacze,616263
podczas gdyset /p=abc<nul|xxd -p
daje61626320
Rozwiązanie dla okrojonej białej przestrzeni w SET / P:
trick polega na tym, że znak cofania, który można przywołać w edytorze tekstów EDIT dla DOS. Aby utworzyć go w EDYCJI, naciśnij ctrlP + ctrlH . Wkleiłbym go tutaj, ale ta strona nie może go wyświetlić. Jest jednak widoczny w Notatniku (jest dziwny, jak mały czarny prostokąt z białym okręgiem pośrodku)
Więc piszesz to:
Kropka może być dowolnym znakiem, służy tylko do wskazania SET / P, że tekst zaczyna się tam, przed spacjami, a nie przy „ Cześć ”. „ 9 ” reprezentuje znak backspace, którego nie mogę tutaj wyświetlić. Musisz wstawić go zamiast 9, a to usunie „ . ”, Po czym otrzymasz:
zamiast:
Mam nadzieję, że to pomoże
źródło
Możesz usunąć nowy wiersz za pomocą „tr” z gnuwin32 ( pakiet coreutils )
Nawiasem mówiąc, jeśli robisz dużo skryptów, gnuwin32 jest kopalnią złota.
źródło
trim
?\r
,\n
lub\r\n
(Nowe linie w OSX i Windows POSIX odpowiednio) nie są znaki „przestrzeń”.Oto kolejna metoda, używa Powershell Write-Host, który ma parametr -NoNewLine, połącz to z
start /b
i oferuje tę samą funkcjonalność od partii.NoNewLines.cmd
Wynik
Ten poniżej jest nieco inny, nie działa dokładnie tak, jak chce PO, ale jest interesujący, ponieważ każdy wynik zastępuje poprzedni wynik emulujący licznik.
źródło
a także echo zaczynające się od spacji
źródło
Może tego właśnie szukasz, to oldschoolowy skrypt ...: P
a może próbujesz zastąpić bieżącą linię zamiast pisać do nowej? możesz z tym eksperymentować, usuwając „% bs%” po „.” podpisać, a także oddzielić inne „% bs%” po „Przykładowej wiadomości”.
Uważam to za bardzo interesujące, ponieważ wykorzystuje zmienną do celów innych niż to, do czego jest przeznaczona. jak widać „% bs%” oznacza backspace. Drugi „% bs%” używa backspace do dodawania spacji po „Przykładowym komunikacie” w celu oddzielenia „Wyjścia polecenia Pause” bez dodawania widocznego znaku po „Przykładowym komunikacie”. Jest to jednak możliwe również przy regularnym znaku procentu.
źródło
set nl=^& echo.
sztuczkę wszędzie, a nazwa zmiennej wprowadza w błąd. % nl% to nie nowa linia znak : rozszerza się&echo.
więc w końcu używasz nowąecho
komendę za każdym razem, stąd znak nowej linii. Możesz to sprawdzić piszącecho "%nl%The%nl%new%nl%line%nl%is%nl%not%nl%apparent%nl%throughout%nl%text%nl%"
. Dostajesz"& echo. The& echo. new& echo. line& echo. is& echo. not& echo. apparent& echo. throughout& echo. text& echo. "
, ujawniając sztuczkę. Dane wyjściowe są takie same, ale nie z powodów, które sugerujesz.cw.exe
Narzędzie do majsterkowania (zapis konsoli)Jeśli nie znajdziesz go od razu po wyjęciu z pudełka, możesz zrobić majsterkowanie. Dzięki temu
cw
narzędziu możesz używać każdego rodzaju znaków. Przynajmniej chciałbym tak myśleć. Przeprowadź test warunków skrajnych i daj mi znać.Przybory
Wszystko czego potrzebujesz to .NET zainstalowany , który jest obecnie bardzo powszechny.
Materiały
Niektóre znaki wpisane / skopiowane-wklejone.
Kroki
.bat
plik o następującej treści.Uruchom.
Teraz masz ładne narzędzie 4KB, dzięki czemu możesz usunąć
.bat
.Alternatywnie, można wstawić ten kod jako podprogram w każdej partii, wyślij uzyskany
.exe
aby%temp%
użyć go w swojej partii i usunąć go, gdy skończysz.Jak używać
Jeśli chcesz napisać coś bez nowej linii:
cw Whatever you want, even with "", but remember to escape ^|, ^^, ^&, etc. unless double-quoted, like in "| ^ &".
Jeśli chcesz powrotu karetki (przejście na początek linii), po prostu biegnij
cw
Wypróbuj to z wiersza poleceń:
źródło
Stworzyłem funkcję na podstawie pomysłu @arnep:
tutaj jest:
Skorzystaj z
call :SL "Hello There"
tego, wiem, że to nic specjalnego, ale tak długo zajęło mi wymyślenie, że pomyślałem, że opublikuję to tutaj.
źródło
Próbka 1: Działa i daje kod wyjścia = 0. To dobrze. Zanotuj "." , bezpośrednio po echu.
Jest to komunikat wyświetlany jak echo Linuksa -n wyświetli go ... 0
Próbka 2: Działa, ale generuje kod wyjścia = 1. To źle. Zwróć uwagę na brak „.” Po echu. To wydaje się być różnicą.
Jest to komunikat wyświetlany jak echo Linuksa -n wyświetliłby go ... 1
źródło
Zainspirowany odpowiedziami na to pytanie, napisałem prosty skrypt wsadowy, który drukuje wartość postępu (0-100%) w tym samym wierszu (zastępując poprzedni). Być może będzie to również cenne dla osób szukających podobnego rozwiązania.
Uwaga : Są
*
to znaki niedrukowalne, należy je wprowadzić za pomocą kombinacji klawiszy [Alt
+Numpad 0
+Numpad 8
], czylibackspace
znaku.źródło
Uważam, że nie ma takiej opcji. Możesz też spróbować tego
źródło
Możesz ukryć nowy wiersz za pomocą polecenia set / p. Polecenie set / p nie rozpoznaje spacji, w tym celu można użyć kropki i znaku spacji, aby ją rozpoznać. Możesz także użyć zmiennej jako pamięci i przechowywać w niej to, co chcesz wydrukować, abyś mógł wydrukować zmienną zamiast zdania. Na przykład:
W ten sposób możesz wydrukować wszystko bez nowej linii. Stworzyłem program do drukowania znaków jeden po drugim, ale możesz także używać słów zamiast znaków, zmieniając pętlę.
W powyższym przykładzie użyłem „enableelayedexpansion”, więc polecenie set / p nie rozpoznaje „!” znak i wypisuje kropkę zamiast tego. Mam nadzieję, że nie używasz wykrzyknika „!” ;)
źródło
Późna odpowiedź tutaj, ale dla każdego, kto musi napisać znaki specjalne w jednym wierszu, dla którego odpowiedź dbenham ma około 80 wierszy za długa i której skrypty mogą się zepsuć (być może z powodu wprowadzenia danych przez użytkownika) pod ograniczeniem zwykłego użycia
set /p
, to chyba najłatwiej po prostu powiązać bat lub cmd z skompilowany C ++ lub C-językowego wykonywalnego, a następnie po prostucout
lubprintf
znaki. Umożliwi to również łatwe pisanie wielu razy w jednym wierszu, jeśli wyświetla się coś w rodzaju paska postępu lub czegoś używającego znaków, jak najwyraźniej OP.źródło
printf
ing zcmd
okienka Win-7 daje mi"'printf' is not recognized as an internal or external command, operable program or batch file."
printf
nie jest rodzimy dla systemu Windows. To jest pytanie systemu Windows.