(Более подробное объяснение можно найти в архивной статье базы знаний Microsoft .)
Следует знать три вещи:
- Знак процента используется в пакетных файлах для представления параметров командной строки:
%1
, %2
, ...
Два знака процента с любыми символами между ними интерпретируются как переменная:
echo %myvar%
- Два знака процента без чего-либо промежуточного (в пакетном файле) обрабатываются как один знак процента в команде (а не в пакетном файле):
%%f
Почему это?
Например, если мы выполним вашу (упрощенную) командную строку
FOR /f %f in ('dir /b .') DO somecommand %f
в пакетном файле правило 2 пытается интерпретировать
%f in ('dir /b .') DO somecommand %
как переменная. Чтобы предотвратить это, вы должны применить правило 3 и выйти %
с секундой %
:
FOR /f %%f in ('dir /b .') DO somecommand %%f