Pakiet Windows: echo bez nowej linii

231

Czym jest wsadowy odpowiednik polecenia powłoki systemu Linux, echo -nktóry pomija znak nowej linii na końcu danych wyjściowych?

Chodzi o to, aby pisać w tej samej linii w pętli.

Gregseth
źródło
2
doprowadziło mnie to do szału. Wiedziałem, że mogę echoto wziąć, -nale po cmd.exeprostu nie zadziałało ^^
panny
11
@panny - Mimo wspólnej nazwy echo nie jest tym samym poleceniem między Windows a Posix. Podobnie jak nslookup, ma różne opcje. Zatem komentarz „Wiedziałem, że mogę echowziąć -n” w kontekście pytania dotyczącego systemu Windows jest niepoprawny.
user66001

Odpowiedzi:

236

Używając seti /pparametru możesz echo bez nowej linii:

C:\> echo Hello World
Hello World

C:\> echo|set /p="Hello World"
Hello World
C:\>

Źródło

arnep
źródło
86
Potok jest bardzo wolny, ponieważ tworzy dwa dodatkowe zadania cmd, szybciej <nul set /p =Hello. set /pnie może powtórzyć znaku równości jako pierwszego znaku ani spacji / tabulatorów.
jeb
11
W moim systemie jest prawie 15 razy szybszy
jeb
28
Dodaj cudzysłowy wokół „Hello World”, aby zapobiec obcym spacjom po d.
Brian
13
Ostrzeżenie: Spowoduje to zmianę ERRORLEVEL na 1. Patrz odpowiedź @xmechanix.
CoperNick
6
@ user246694 < nulto przekierowanie z NULurządzenia. Nie zawiera nic, ale to wystarczy, set /paby przestać czekać na dane wejściowe użytkownika
jeb
100

Uż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=Hellonadal podniesie ERRORLEVEL do 1.

xmechanix
źródło
20
Ostrzeżenie: To polecenie ustawi ERRORLEVEL na 0. Jeśli ERRORLEVEL był większy niż 0, zmieni ERRORLEVEL na 0. To również może być niebezpieczne podczas pisania bardziej zaawansowanych skryptów. (ale +1 za odpowiedź)
CoperNick
Tak więc w zasadzie potrzebujesz IF ERRORLEVEL == 0 (...) ELSE (...), aby nie zaszkodzić środowisku w takich okolicznościach. Do licha.
SilverbackNet,
28

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 :writeInitializemetoda zawiera literał ciągu, który może nie być dobrze publikowany na stronie. Uwzględniono uwagę, która opisuje sekwencję znaków.

:writeI :writeVarmetody 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.

@echo off
setlocal disableDelayedExpansion
call :writeInitialize
call :write "=hello"
call :write " world!%$write.sub%OK!"
echo(
setlocal enableDelayedExpansion
set lf=^


set "str= hello!lf!world^!!!$write.sub!hello!lf!world"
echo(
echo str=!str!
echo(
call :write "str="
call :writeVar str
echo(
exit /b

:write  Str
::
:: Write the literal string Str to stdout without a terminating
:: carriage return or line feed. Enclosing quotes are stripped.
::
:: This routine works by calling :writeVar
::
setlocal disableDelayedExpansion
set "str=%~1"
call :writeVar str
exit /b


:writeVar  StrVar
::
:: Writes the value of variable StrVar to stdout without a terminating
:: carriage return or line feed.
::
:: The routine relies on variables defined by :writeInitialize. If the
:: variables are not yet defined, then it calls :writeInitialize to
:: temporarily define them. Performance can be improved by explicitly
:: calling :writeInitialize once before the first call to :writeVar
::
if not defined %~1 exit /b
setlocal enableDelayedExpansion
if not defined $write.sub call :writeInitialize
set $write.special=1
if "!%~1:~0,1!" equ "^!" set "$write.special="
for /f delims^=^ eol^= %%A in ("!%~1:~0,1!") do (
  if "%%A" neq "=" if "!$write.problemChars:%%A=!" equ "!$write.problemChars!" set "$write.special="
)
if not defined $write.special (
  <nul set /p "=!%~1!"
  exit /b
)
>"%$write.temp%_1.txt" (echo !str!!$write.sub!)
copy "%$write.temp%_1.txt" /a "%$write.temp%_2.txt" /b >nul
type "%$write.temp%_2.txt"
del "%$write.temp%_1.txt" "%$write.temp%_2.txt"
set "str2=!str:*%$write.sub%=%$write.sub%!"
if "!str2!" neq "!str!" <nul set /p "=!str2!"
exit /b


:writeInitialize
::
:: Defines 3 variables needed by the :write and :writeVar routines
::
::   $write.temp - specifies a base path for temporary files
::
::   $write.sub  - contains the SUB character, also known as <CTRL-Z> or 0x1A
::
::   $write.problemChars - list of characters that cause problems for SET /P
::      <carriageReturn> <formFeed> <space> <tab> <0xFF> <equal> <quote>
::      Note that <lineFeed> and <equal> also causes problems, but are handled elsewhere
::
set "$write.temp=%temp%\writeTemp%random%"
copy nul "%$write.temp%.txt" /a >nul
for /f "usebackq" %%A in ("%$write.temp%.txt") do set "$write.sub=%%A"
del "%$write.temp%.txt"
for /f %%A in ('copy /z "%~f0" nul') do for /f %%B in ('cls') do (
  set "$write.problemChars=%%A%%B    ""
  REM the characters after %%B above should be <space> <tab> <0xFF>
)
exit /b
dbenham
źródło
1
Miło widzieć bardzo potężne rozwiązanie, które poradzi sobie ze wszystkimi postaciami
jeb
2
Chciałbym zwrócić uwagę, że jeśli komputer ma połączenie sieciowe z Internetem, mniej więcej tyle kodu wsadowego może zostać użyte do pobrania i zainstalowania Pythona lub czegokolwiek innego na komputerze, co może pozbyć się wsadu. Partia jest fajna, ale jej możliwości strunowe są najlepsze na weekendowe wyzwania.
n611x007
@dbenham on line 6 „echo (” to funkcjonalnie to samo co „echo”. - nie widziałem tego wcześniej.
Skip R
2
@SkipR - Tak, funkcjonalnie jest taki sam jak 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, jest ECHO(.
dbenham
10

Jako dodatek do odpowiedzi @ xmechanix zauważyłem, pisząc zawartość do pliku:

echo | set /p dummyName=Hello World > somefile.txt

Ż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:

echo | set /p dummyName="Hello World" > somefile.txt

Wydrukuje ciąg bez znaku nowej linii lub spacji na końcu.

Joan Bruguera
źródło
5
Dodatkowa przestrzeń powinna zniknąć, jeśli nie umieszczać spacji między Worldi >...
aschipfl
@aschipfl Próbowałem, ale nie robi.
Joan Bruguera,
Metoda zmiennej cytowanej, nieudokumentowana funkcja polecenia set, jest ogólnie taka, jak widzę, do której należy podejść, ponieważ działa ona we wszystkich wersjach Windows NT (i 9x, jeśli pamiętam). Oznacza to, że nazwa zmiennej zawija się na końcu wartości w cudzysłowie. Dotyczy to również Set / P.
Ben Personick
1
IE: echo | set / p "dummyName = Hello World"> somefile.txt
Ben Personick
2
@aschipfl Pojawi się dodatkowa spacja, jeśli nie robisz cudzysłowów i robisz fajkę. xxd to narzędzie do zrzutu heksadecymalnego, więc widzimy np. set /p="abc"<nul|xxd -pwyświetlacze, 616263 podczas gdy set /p=abc<nul|xxd -pdaje61626320
barlop
9

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:

<nul set /p=.9    Hello everyone

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:

    Hello Everyone

zamiast:

Hello Everyone

Mam nadzieję, że to pomoże

Pedro
źródło
2
Zapomniałem powiedzieć, działa w systemie Windows 7 Nie działa w wierszu polecenia, tylko w partii. Dla każdego, kto nie dostaje znaku, pobierz ten przykład: pecm.com.sapo.pt/SET_with_backspace_char.txt
Pedro
Dotyczy to również Echo
Ben Personick
... Więc po dokładnym przeszukaniu nie znalazłem NIGDY w sieci. To może być jedyny przypadek, kiedy coś odkryłem, i przy odrobinie szczęścia. Dla tych, którzy nie wiedzą, MOŻESZ wprowadzić znaki kontrolne, jeśli podasz swój wiersz polecenia cmd w starszym trybie i użyjesz właściwej czcionki. ... Ale jeśli po prostu przekierujesz coś do pliku lub> con, to również zadziała. Poważnie. Wklej to DOKŁADNIE w wierszu polecenia: "echo ← c◙◙ ○○ Harharhar !! ◙ ○○ ------------- ◙◙ ○○ Jestem najgorszy!?: '(○ ♪ ○ NIE! • ♪ ○ Czuję się świetnie! Hazzah-le-oop! ◙◙ ○ Jestem programistą, usłysz mnie ... coś. ◙> con ".
Brent Rittenhouse
Ok, mam nadzieję, że dowiedziałem się tego przed kimkolwiek innym, ale ... wydaje się, że jest to zależne od braku bycia stroną kodową Unicode. Możesz zapisać początkowy w zmiennej do chcp 437, ustawić zestaw w zmiennej lub wypisać go, a następnie przełączyć z powrotem (i nadal powinien wypisywać). Nadal się z tym bawię.
Brent Rittenhouse
Ponadto, czy ktoś ma pojęcie, dlaczego ← c czyści ekran ?! Nie mogę znaleźć tego wystąpienia nigdzie w sieci. Jest to konkretnie ta kombinacja, chociaż wydaje się, że możesz mieć spacje między dwoma postaciami. Wydaje się, że dla każdej innej postaci po prostu… usuwa się pierwszą postać. Nie rozumiem ...
Brent Rittenhouse
7

Możesz usunąć nowy wiersz za pomocą „tr” z gnuwin32 ( pakiet coreutils )

@echo off
set L=First line
echo %L% | tr -d "\r\n"
echo Second line
pause

Nawiasem mówiąc, jeśli robisz dużo skryptów, gnuwin32 jest kopalnią złota.

BearCode
źródło
Proponuję również zainstalować git bash . na pewno nie jest to to samo, co gnuwin32 (i jest to kopalnia złota, dlatego +1), to po prostu niezła konfiguracja, a git-bash na prawym przycisku myszy prawie wszędzie, w tym przycisk menu Start.
hakre
czy możesz użyć tr, aby po prostu usunąć ostatni znak spacji, np. w trim?
panny
użyj sed dla trim: sed -e "s / * $ //"
BearCode
@panny - Nie mogę znaleźć posix / linux o nazwie trim. Również \r, \nlub \r\n(Nowe linie w OSX i Windows POSIX odpowiednio) nie są znaki „przestrzeń”.
user66001
5

Oto kolejna metoda, używa Powershell Write-Host, który ma parametr -NoNewLine, połącz to z start /bi oferuje tę samą funkcjonalność od partii.

NoNewLines.cmd

@ECHO OFF
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 1 - ';Write-Host -NoNewLine 'Result 2 - ';Write-Host -NoNewLine 'Result 3 - '"
PAUSE

Wynik

Result 1 - Result 2 - Result 3 - Press any key to continue . . .

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.

@ECHO OFF
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 1 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 2 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 3 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 4 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 5 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 6 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 7 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 8 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 9 - '"
PAUSE
Knuckle-Dragger
źródło
3

od tutaj

<nul set /p =Testing testing

a także echo zaczynające się od spacji

echo.Message goes here
Afdsafnadsjbcewjhwnfy4ntc874fg
źródło
2

Może tego właśnie szukasz, to oldschoolowy skrypt ...: P

set nl=^& echo. 
echo %nl%The%nl%new%nl%line%nl%is%nl%not%nl%apparent%nl%throughout%nl%text%nl%
echo only in prompt.
pause

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”.

for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "bs=%%a"
<nul set /p=.%bs%         Example message         %bs%
pause

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.

zask
źródło
2
Widzę tę 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ą echokomendę za każdym razem, stąd znak nowej linii. Możesz to sprawdzić pisząc echo "%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.
cdlvcdlv
2

cw.exeNarzę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 cwnarzę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

  1. Utwórz .batplik o następującej treści.
/* >nul 2>&1

@echo off
setlocal

set exe=cw
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d  /o:-n "%SystemRoot%\Microsoft.NET\Framework\*csc.exe"') do set "csc=%%v"

"%csc%" -nologo -out:"%exe%.exe" "%~f0"

endlocal
exit /b %errorlevel%

*/

using System;

namespace cw {
    class Program {
        static void Main() {
            var exe = Environment.GetCommandLineArgs()[0];
            var rawCmd = Environment.CommandLine;
            var line = rawCmd.Remove(rawCmd.IndexOf(exe),exe.Length).TrimStart('"');
            line = line.Length < 2 ? "\r" : line.Substring(2) ;
            Console.Write(line);
        }
    }
}
  1. Uruchom.

  2. 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 .exeaby %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ń:

for /l %a in (1,1,1000) do @(cw ^|&cw&cw /&cw&cw -&cw&cw \&cw)
cdlvcdlv
źródło
Zainspirowałem się twoją odpowiedzią i stworzyłem to małe narzędzie z Go i tym towarzyszącym zadaniem dla Azure Pipelines. Po prostu pobiera wtyczkę standardową i wysyła ją w określonym formacie do pobrania przez kompilację. Dziękuję Ci!
riezebosch
2

Stworzyłem funkcję na podstawie pomysłu @arnep:

echo | set / p = "Hello World"

tutaj jest:

:SL (sameline)
echo|set /p=%1
exit /b

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.

Mark Deven
źródło
1

Próbka 1: Działa i daje kod wyjścia = 0. To dobrze. Zanotuj "." , bezpośrednio po echu.

C: \ Users \ phife.dog \ gitrepos \ 1 \ repo_abc \ scripts #
@echo. | set / p JUNK_VAR = Jest to komunikat wyświetlany jak echo Linuksa -n wyświetli go ... & echo% ERRORLEVEL%

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ą.

C: \ Users \ phife.dog \ gitrepos \ 1 \ repo_abc \ scripts #
@echo | set / p JUNK_VAR = Jest to komunikat wyświetlany jak echo Linuksa -n wyświetli go ... & echo% ERRORLEVEL%

Jest to komunikat wyświetlany jak echo Linuksa -n wyświetliłby go ... 1

użytkownik3175529
źródło
1

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], czyli backspaceznaku.

@ECHO OFF

FOR /L %%A in (0, 10, 100) DO (     
    ECHO|SET /P="****%%A%%"    
    CALL:Wait 1
)

GOTO:EOF

:Wait
SET /A "delay=%~1+1"
CALL PING 127.0.0.1 -n %delay% > NUL
GOTO:EOF
Spinicoffee
źródło
0

Uważam, że nie ma takiej opcji. Możesz też spróbować tego

set text=Hello
set text=%text% world
echo %text%
m0skit0
źródło
3
Nadal będzie drukować nowy wiersz.
René Nyffenegger
3
Możesz konkatenować tę samą zmienną, ile chcesz i wyświetlać echo tylko na samym końcu.
m0skit0
2
Drukowanie go podczas wykonywania pętli lub na końcu nie ma znaczenia, czy dane są zachowane. Dla każdej pętli po prostu konkatenujesz dane, a następnie po zakończeniu pętli drukujesz ją. Wynik jest taki sam.
m0skit0,
9
Nie ma znaczenia, czy jest to wskaźnik postępu pętli.
gregseth,
3
Nigdy nie powiedziałeś tego w swoim pytaniu ani nie prosiłeś o takie zachowanie w dowolnym miejscu pytania.
m0skit0,
0

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:

@echo off
setlocal enabledelayedexpansion
for /f %%a in ('"prompt $H & for %%b in (1) do rem"') do (set "bs=%%a")
cls
set "var=Hello World! :)"
set "x=0"

:loop
set "display=!var:~%x%,1!"
<nul set /p "print=.%bs%%display%"
ping -n 1 localhost >nul
set /a "x=%x% + 1"
if "!var:~%x%,1!" == "" goto end
goto loop

:end
echo.
pause
exit

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 „!” ;)

JVRaghava rama Sharma
źródło
-1

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 prostu coutlub printfznaki. 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.

SeldomNeedy
źródło
@jiggunjer Jesteś pewien? printfing z cmdokienka Win-7 daje mi"'printf' is not recognized as an internal or external command, operable program or batch file."
SeldomNeedy
printfnie jest rodzimy dla systemu Windows. To jest pytanie systemu Windows.
kayleeFrye_onDeck 29.09.16
1
@kayleeFrye_onDeck Zakładam, że twój komentarz jest skierowany do jiggunjer , a nie do mnie; Sugeruję w moim pytaniu, że C i C ++ mogą być używane jako dość niezależna od platformy alternatywa dla poleceń powłoki w przypadkach, w których formatowanie jest ważne.
SeldomNeedy
1
Wybacz mi ojcze, bo przeszukałem.
kayleeFrye_onDeck
Ale wtedy dane wejściowe do powłoki muszą zostać poprawnie przeanalizowane. Na przykład, jak taki program wydrukuje znak cudzysłowu?
Alex