Переменные пакетного файла, инициализированные в для цикла

Я думаю, вам нужно сделать элемент internal видимым для DynamicProxyGenAssembly2. Эта сборка создается библиотекой Castle DynamicProxy, используемой NSubstitute (и многими другими библиотеками-макетами .NET) для создания типов замены / mock.

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] 

Если вы устанавливаете пакет NSubstitute.Analyzers , он должен сообщить вам об этом случае.

17
задан Bernhard Eriksson 6 July 2018 в 09:15
поделиться

4 ответа

Поэтому () блок анализируется только однажды, он заменяет %TMPFILE %, прежде чем он выполнит Ваш цикл.

9
ответ дан 30 November 2019 в 10:29
поделиться

Для записи исправленный сценарий похож на это:

setlocal ENABLEDELAYEDEXPANSION

for %%f in (%MYTARGETDIR%\*config.xml) do (

  SET TMPFILE=%%F.tmp

  echo In loop !TMPFILE!
)

echo End loop %TMPFILE%

Спасибо chris для Вашей справки.

21
ответ дан 30 November 2019 в 10:29
поделиться

Можно также использовать НАБОР ВЫЗОВА вместо задержанного расширения.

6
ответ дан 30 November 2019 в 10:29
поделиться

Это, потому что переменными среды заменяют, когда команда читается. Для следующей команды:

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

Когда Вы включаете задержанное расширение, "%" маркеры все еще действуют как прежде, но можно использовать "!" маркеры, чтобы сделать задержанное расширение.

16
ответ дан 30 November 2019 в 10:29
поделиться