Jak ustawić var ​​= /? w cmd.exe?

1
C:\>set g=/?

C:\>echo %g%
Displays messages, or turns command-echoing on or off.

  ECHO [ON | OFF]
  ECHO [message]

Type ECHO without parameters to display the current echo setting.

C:\>

jeśli ustawię g = "/?" następnie echo% g%, następnie zawiera cudzysłowy.

Chcę tylko /? bez cudzysłowów, kiedy wykonuję echo% g%, powinno po prostu powiedzieć /?

Bez większego powodu. Ale tego chcę. Mam nadzieję, że jest to możliwe.

barlop
źródło

Odpowiedzi:

4

Aby tekst był wyświetlany jako wynik, nawet jeśli jest to słowo ON, słowo OFFlub sekwencja opcji, użyj niesławnej sztuczki echo-kropka . Zamiast echopolecenia użyj echo.polecenia.

C:\>set g=/?

C:\>echo. %G%
 /?

C:\>echo. on
 on

C:\>echo.%G%
/?

C:\>

Zwróć uwagę na dziwne zachowanie w echo.odniesieniu do oddzielania białych znaków oraz w odniesieniu do tego, jak parser wiersza poleceń wykrywa koniec nazwy polecenia. Jeśli posiadasz TCC / LE JP Software , możesz oczywiście nadal używać tej dość wątpliwej składni, która ma swoje korzenie w MS-DOS, COMMANDgdzie kilka znaków interpunkcyjnych oprócz białych znaków to znaki „kończące”, ale o wiele lepiej jest użyć bardziej regularna natywna składnia TCC, między innymi dlatego, że zachowuje zwykłe białe znaki jako separator między nazwą polecenia a ogonem polecenia:

[C:\]set g=/?

[C:\]echo ``%G%
/?

[C:\]

Natywna składnia TCC nie zapobiegnie jednak oni nie offzostanie specjalnie rozpoznana. Do tego nadal potrzebujesz echo.polecenia.

JdeBP
źródło
3
W CMD echo(może być czasem konieczne - ktoś wykonał test i echo.%var%może zderzyć się z nazwą pliku itd.
grawity
@grawity ciekawy link, więc echo.% var% koliduje, jeśli masz plik o nazwie echo w tym katalogu! Ale jak zrobiłbyś echo% bb%, gdybyś miał zmienną o nazwie bb i nie chciałeś, aby wyświetlała zawartość bb? ale dosłownie% bb%. Widzę echo.% Bb% lub echo /% bb% lub echo% bb% wszystkie mają problem.
barlop
@barlop: Spróbuj echo ^%bb^%i echo %%bb%%jeden z nich powinien działać.
grawity
@gravvity co z! bb! ?
barlop
@barlop echo ^^! bb ^! nie znam mechaniki, dlaczego uniknięcie pierwszego wykrzyknika nie zrobiło tego, ale dwukrotnie, ale i tak.
barlop
2

Właściwie to działa tak, jak jest. :)

Gdy ustawisz „g” na „/?” a następnie echo %g%pisz echo /?, co piszesz , co (tak jak powinno) zapewnia pomoc w wyświetlanym echu („Wyświetla wiadomości lub włącza lub wyłącza echo poleceń ...”).

Jeśli wpiszesz echo test%g%, otrzymasz zwrot test/?.

Ƭᴇcʜιᴇ007
źródło
1

Właściwie set g=/?to jest poprawne. Problemem jest /? oznacza coś specjalnego dla cmd.exe. Oznacza pokaż pomoc dla polecenia. Na przykład spróbuj dir /?. Lub w twoim przypadku echo /?.

Uruchom, set ga zobaczysz, że g jest rzeczywiście ustawiony na /?

Tak więc po uruchomieniu echo %g%naprawdę działa, echo /?co każe cmd.exe wydrukować komunikat pomocy.

jftuga
źródło
0

Wystarczy uciec od „ /” - więc spróbuj:

C:\>set g=\/?
James T. Snell
źródło
nie testowałeś tego, prawda? Spróbuj echo% b% po. W każdym razie znakiem ucieczki w cmd jest ^ i zauważ, że zestaw g = ^ /? jest taki sam jak zestaw g = /?
barlop