Я думаю, вам нужно сделать элемент internal
видимым для DynamicProxyGenAssembly2
. Эта сборка создается библиотекой Castle DynamicProxy, используемой NSubstitute (и многими другими библиотеками-макетами .NET) для создания типов замены / mock.
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
Если вы устанавливаете пакет NSubstitute.Analyzers , он должен сообщить вам об этом случае.
Поэтому () блок анализируется только однажды, он заменяет %TMPFILE %, прежде чем он выполнит Ваш цикл.
Для записи исправленный сценарий похож на это:
setlocal ENABLEDELAYEDEXPANSION
for %%f in (%MYTARGETDIR%\*config.xml) do (
SET TMPFILE=%%F.tmp
echo In loop !TMPFILE!
)
echo End loop %TMPFILE%
Спасибо chris для Вашей справки.
Можно также использовать НАБОР ВЫЗОВА вместо задержанного расширения.
Это, потому что переменными среды заменяют, когда команда читается. Для следующей команды:
for %%f in (%mytargetdir%\*config.xml) do (
set tmpfile=%%f.tmp
echo In loop %tmpfile%
)
вся команда (от for
к закрывающей скобке), считан и заменен перед выполнением.
Необходимо использовать задержанное расширение, такой как с:
@echo off
setlocal enableextensions enabledelayedexpansion
set full=/u01/users/pax
:loop1
if not "!full:~-1!" == "/" (
set full2=!full:~-1!!full2!
set full=!full:~,-1!
goto :loop1
)
echo !full!
endlocal
Когда Вы включаете задержанное расширение, "%"
маркеры все еще действуют как прежде, но можно использовать "!"
маркеры, чтобы сделать задержанное расширение.