Cmd / S очень полезен, так как избавляет вас от необходимости беспокоиться о "цитатах".Вспомните, что аргумент /C
означает «выполнить эту команду, как будто я набрал ее в командной строке, а затем выйти».
Поэтому, если у вас есть сложная команда, которую вы хотите передать в CMD.exe, вы должны либо запомнить правила цитирования аргументов CMD и правильно экранировать все кавычки, либо использовать /S
, который вызывает специальную командуправило неразборчивости «Обрезать первый и последний "
и рассматривать все другие символы как команду для выполнения без изменений».
Вы можете использовать его там, где хотите воспользоваться возможностями оболочки CMD,вместо непосредственного вызова другой программы.Например, расширение переменной среды, перенаправление вывода или ввода или использование встроенных модулей CMD.exe.
Пример:
Использовать встроенную оболочку: Это выполняется так, как если бы вы ввели DEL /Q/S "%TMP%\TestFile"
в приглашении:
CMD.exe /S /C " DEL /Q/S "%TMP%\TestFile" "
При этом SomeCommand.exe перенаправляет стандартный вывод во временный файл и стандартную ошибку в одно и то же место:
CMD.exe /S /C " "%UserProfile%\SomeCommand.exe" > "%TMP%\TestOutput.txt" 2>&1 "
Так что же значит /S
дать тебе дополнительно?В основном это избавляет вас от необходимости беспокоиться о цитировании цитат.Это также помогает, когда вы не уверены, содержит ли, например, переменная окружения символы кавычек.Просто скажите /S
и поместите дополнительную цитату в начале и конце.
Смутно связаны: $ * в Bourne Shell.
Некоторый фон
* 1028Напомним, что список аргументов main () является C-ism и Unix-ism.Оболочка Unix / Linux (например, Bourne Shell и т. Д.) Интерпретирует командную строку, снимает кавычки с аргументов, расширяет символы подстановки, такие как
*
, в списки файлов и передает список аргументов вызываемой программе.
Поэтому, если вы скажете:
$ vi *.txt
Команда vi видит, например, следующие аргументы:
vi
a.txt
b.txt
c.txt
d.txt
Это потому, что unix / linux работает внутренне на основе «списка аргументов».
Windows, которая в конечном итоге является производной от CP / M и VAX, не использует эту систему для внутреннего использования.Для операционной системы командная строка представляет собой просто строку символов.Вызываемая программа отвечает за интерпретацию командной строки, расширение глобусов файлов (*
и т. Д.) И обращение с кавычками в кавычках.
Таким образом, аргументы, ожидаемые C, должны быть взломаныC библиотека времени выполнения.Операционная система предоставляет только одну строку с аргументами в, и если ваш язык не является C (или даже если это так), он не может интерпретироваться как аргументы, разделенные пробелом, заключенные в соответствии с правилами оболочки, но как нечто совершенно иное.