Я пытаюсь понять, как побег^Caret работает в пакетной CMD. Допустим, я печатаю эту строку в CMD окно, я ожидал бы, чтобы отправить данные DIR в «C: \ мой text.txt»Двойные котировки в пакетной строке redux
CMD.EXE "/C > ^"c:\my text.txt^" DIR C:\*.*"
Вместо этого я получаю ошибку:
'txt.txt" DIR *.*"' is not recognized as an internal or external command,
operable program or batch file.
Если я что-то так просто, как это:
ECHO "^"^""
Expected: """"
Actual : "^"""
Даже если я пытаюсь дважды процитировать так:
ECHO " "" "" "
Expected: " " " "
Actual : " "" "" "
Может кто-нибудь «рассказать, как это работает и что является надежным способом - избежать двойных кавычек в командной строке?
Спасибо.
Дополнительный пример:
Почему это работает:
cmd.exe "/C sqlcmd.exe -S.\SQLEXPRESS -E -Q"select suser_name()" > "c:\temp\test 1.txt""
, но это дает ошибку "Система не может найти указанный путь." и не создает txt-файл.
cmd.exe "/C "sqlcmd.exe" -S.\SQLEXPRESS -E -Q"select suser_name()" > "c:\temp\test 1.txt""
Я знаю, что не нужно в этом случае, но как бы я прилагаю команду sqlcmd.exe в кавычках?
Я также попытался удалить кавычки из всей линии с теми же результатами, т.е.
cmd.exe /C "sqlcmd.exe" -S.\SQLEXPRESS -E -Q"select suser_name()" > "c:\temp\test 1.txt"
Еще раз спасибо.
Спасибо за ответ. Я добавил дополнительный пример выше, поскольку комментарии допускают ограниченное форматирование. Я пробовал использовать ваши предложения, но до сих пор не повезло. –
@Neilw - Я проверил код в своем ответе, и все они работают (я забыл включить 'setlocal enableDelayedExpansion' - было сделано редактирование). У меня не было возможности работать над более сложной командой в вашем отредактированном ответе. – dbenham
@Neilw - Хорошо, я думаю, у меня есть решение для вашего обновленного вопроса. – dbenham