Командная строка Windows (cmd.exe
) имеет необязательный /s
parameter, который изменяет поведение /c
(запустите определенную команду, а затем выйдет) или /k
(запустите определенную команду, а затем отобразите приглашение оболочки). Этот параметр /s
, очевидно, имеет какое-то отношение к какому-то управлению тайной цитатой.Что такое `cmd/s`?
The docs запутаны, но, насколько я могу сказать, когда вы делаете cmd /c
something
, и something
содержит кавычки, то по умолчанию cmd
иногда сдирать эти цитаты, и /s
говорит его оставить они одни.
Что я не понимаю, когда удаление цитаты сломает что-либо, потому что это единственный раз, когда /s
(«подавить поведение по умолчанию для удаления котировок») будет необходимо. Он удаляет только кавычки под определенным тайным набором условий, и одним из таких условий является то, что первым символом после /c
должен быть кавычек. Таким образом, это не удаление котировок вокруг аргументов; это либо удаление кавычек по пути к EXE, в котором вы работаете, либо вокруг всей командной строки (или, возможно, около первой половины командной строки, что было бы странно).
- Если указан путь к EXE, например.
cmd /c "c:\tools\foo.exe" arg1 arg2
, тогда цитаты не нужны, и еслиcmd
хочет их удалить, штраф. (Он не удалит их, если у пути есть пробел в имени - это еще один из тайных правил.) Я не могу представить никаких причин для подавления удаления цитат, поэтому/s
кажется ненужным. - Если указана вся командная строка, например.
cmd /c "foo.exe arg1 arg2"
, то кажется, что удаление цитаты было бы необходимо, поскольку в системе нет EXE с именемfoo.exe arg1 arg2
; поэтому кажется, что отказ от цитаты с использованием/s
фактически нарушит все. (На самом деле, однако, это не нарушает вещи:cmd /s /c "foo.exe arg1 arg2"
работает просто отлично.)
Есть несколько тонкостей /s
, который меня ускользает? Когда это когда-нибудь понадобится? Когда это даже изменит ситуацию?
Вот кто-то, кто говорит '/ s', помог ему: http://stackoverflow.com/questions/355988/how-do-i-deal-with-quote-characters-when-using-cmd-exe Я не знаю, t точно знает, что делает 'RunProgram()' сделал/делает, но попытка перепрограммировать проблему в командной строке мне некуда. Все, что я знаю, это то, что синтаксический анализ команды cmd.exe (особенно с экранирующими символами) иногда бывает странным, поэтому я не сомневаюсь, что '/ s' полезен хотя бы по одному случаю. –
@MichaelBurr: Я уверен, что ему просто нужна дополнительная пара котировок;/s в этом случае было избыточным, поскольку условия, при которых/s не имеют значения, не выполнялись. Но это не наносит вреда, и это означает, что код будет работать одинаково, независимо от того, как изменилась команда. –
Я считаю это полезным по причинам, указанным @HarryJohnston. Также это вопрос программирования при программировании с использованием сценариев оболочки Windows CMD, поэтому не уверен, почему люди голосуют, закрываясь как «вне темы». – Ben