cosa significa simbolo ^ significa nello script Batch

In questo comando:

FOR /F %%A IN ('TYPE "%InFile%"^|find /v /c ""')DO SET "Till=%%A" 

cosa significa il ^ ?

Il simbolo ^ (chiamato anche caret o circumflex) è un carattere di escape nello script Batch. Quando viene utilizzato, il carattere successivo viene interpretato come un carattere ordinario.

Nello script, l’output del comando TYPE deve essere scritto come input per il comando FIND.
Se non usi il carattere di escape ^ prima di | , quindi il significato regolare di | è un personaggio di pipe .

La documentazione dice:

Per visualizzare una pipe (|) o un carattere di reindirizzamento () quando si utilizza echo, utilizzare un carattere di accento immediatamente prima del carattere pipe o di reindirizzamento (ad esempio, ^>, ^

Il carattere “^” del caret ha due scopi nei file batch di Windows:

1. continuazioni di linea:

~~~

 @echo off dir ^ /ad ^ c:\temp 

~~~~

risultati in dir / ad c: \ temp, che elenca solo le directory in C: \ temp.

2. Escaping caratteri di shell riservati e | (<> ^.

Usa un segno di omissione precedente per uscire e stampare il carattere:

 echo this pipe will print ^| but this one won't | echo and this will print one caret ^^ 

Infinite Recursion descrive il comportamento generale di ^ , ma è un po ‘confuso sul motivo per cui deve essere usato all’interno di IN ('yourCommand') .

yourCommand viene effettivamente eseguito implicitamente all’interno del proprio processo CMD.EXE utilizzando C:\Windows\system32\cmd.exe /c yourCommand . Ovviamente la pipa deve essere inclusa nel comando nel tuo caso. Ma l’intera riga deve essere analizzata dal parser batch prima che possa passare la clausola IN () per essere eseguita. Senza il ^ , il | confonde il parser batch. Il ^ scappa (protegge) il tubo durante l’analisi iniziale del lotto.