В этой команде:
FOR /F %%A IN ('TYPE "%InFile%"^|find /v /c ""')DO SET "Till=%%A"
что означает ^
?
В этой команде:
FOR /F %%A IN ('TYPE "%InFile%"^|find /v /c ""')DO SET "Till=%%A"
что означает ^
?
Символ ^ (также называемый кареткой или диафрагмой) - это escape-символ в пакетном сценарии. Когда он используется, следующий символ интерпретируется как обычный символ.
В вашем скрипте вывод команды TYPE будет записан как ввод команды FIND.
Если вы не используете escape-символ ^ перед |
, то обычное значение |
это характер трубы
Документация гласит:
Чтобы отобразить символ канала (|) или символ перенаправления (<или>) при использовании эха, используйте символ вставки непосредственно перед символом канала или перенаправления (например, ^>, ^ <или ^ |). Если вам нужно использовать символ вставки (^), введите два (^^).
Символ каретки '^' выполняет две задачи в пакетных файлах Windows:
1. продолжение строки:
~~~
@echo off
dir ^
/ad ^
c:\temp
~~~~
приводит к dir/ad c:\temp, в котором перечислены только каталоги в C:\temp.
2. Выделение зарезервированных символов оболочки и | (< > ^.
Используйте предыдущую каретку для выхода и печати символа:
echo this pipe will print ^| but this one won't |
echo and this will print one caret ^^
Infinite Recursion описывает общее поведение ^
, но немного нечеткое по причине того, почему оно должно использоваться в IN ('yourCommand')
.
yourCommand
фактически выполняется неявно в рамках собственного процесса CMD.EXE, используя C:\Windows\system32\cmd.exe /c yourCommand
. Очевидно, что труба должна быть включена в команду в вашем случае. Но вся строка должна анализироваться парсерным парсером, прежде чем он сможет передать предложение IN(), которое должно быть выполнено. Без ^
, |
путает парсерный парсер. ^
экранирует (защищает) канал во время начального парсинга.