FOR /F %%A IN ('TYPE "%InFile%"^|find /v /c ""')DO SET "Till=%%A"
что означает ^?
Ответ 1
Символ ^ (также называемый кареткой или диафрагмой) - это escape-символ в пакетном сценарии. Когда он используется, следующий символ интерпретируется как обычный символ.
В вашем скрипте вывод команды TYPE будет записан как ввод команды FIND. Если вы не используете escape-символ ^ перед | , то обычное значение | это характер трубы
Чтобы отобразить символ канала (|) или символ перенаправления (<или>) при использовании эха, используйте символ вставки непосредственно перед символом канала или перенаправления (например, ^>, ^ <или ^ |). Если вам нужно использовать символ вставки (^), введите два (^^).
Ответ 2
Символ каретки '^' выполняет две задачи в пакетных файлах 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 ^^
yourCommand фактически выполняется неявно в рамках собственного процесса CMD.EXE, используя C:\Windows\system32\cmd.exe /c yourCommand. Очевидно, что труба должна быть включена в команду в вашем случае. Но вся строка должна анализироваться парсерным парсером, прежде чем он сможет передать предложение IN(), которое должно быть выполнено. Без ^, | путает парсерный парсер. ^ экранирует (защищает) канал во время начального парсинга.