Переменная Область в пакетных файлах - PullRequest
1 голос
/ 25 июля 2011

Я новичок в написании командных файлов;его синтаксис вызывает рвоту, поэтому я стараюсь держаться подальше.Короче говоря, мне нужен был быстрый и простой способ проверить огромное количество данных и экспортировать их в CSV-файл в Windows.Я написал простой маленький пакетный файл, чтобы выполнить работу за меня.

У меня возникли некоторые проблемы с переменной областью действия.Идея этого кода состоит в том, чтобы создать строку данных, разделенных запятыми, а затем повторить вывод.другой файл перехватит выходные данные, но это не важно.

Вот некоторый псевдокод, который отображает проблему, с которой я столкнулся. Я сталкивался с этой проблемой несколько раз и значительно реструктурировал свой код, чтобы попытаться избежать его

setlocal EnableDelayedExpansion
::pseudo code for loop
LOOP THROUGH LIST OF FILE PATHS PUTTING THEM INTO %%B do (

set str=, ::reset str

other code

if exist %%B ( 

    other code

    ::echos the file path and checks if it is a specific file i need to search
    echo %%B 2> NUL | find /I /N %%B "%phrase_0_%" > NUL
    if %ERRORLEVEL% == 0 ( 

        ::HERE IS THE PROBLEM SEE BELOW FOR MORE INFO

        type %%B 2> NUL | find /I /N "%phrase_1_%" > temp.txt
        set /p var=<temp.txt
        set "str=!str!%var%,"
        del temp.txt

        type %%B 2> NUL | find /I /N "%phrase_2_%" > temp.txt
        set /p var=<temp.txt
        set "str=!str!%var%,"
        del temp.txt
    )

) else ( ::OTHER CODE )

echo !str!
)
endlocal

Хорошо, вот в чем проблема.У меня были проблемы с вложенными вызовами переменных.Я бы использовал этот удобный трюк цикла, чтобы поместить вывод одной команды в переменную, но для этого требовался другой уровень вложенности, что означало еще больше проблем с изменением значения переменных.как вы можете видеть, я могу связываться с% str% внутри:

if exists %%B(

, используя setlocal EnableDelayedExpansion и! str!ерунда.но это не сработает, когда я перейду на другой уровень с

if %ERRORLEVEL% == 0

У вас, ребята, есть какие-то предложения относительно того, в чем может быть проблема, или какое может быть решение?

1 Ответ

2 голосов
/ 25 июля 2011

Задержка расширения будет работать независимо от уровня вложенности.Но у вас все равно есть другие проблемы:

set /p var=<temp.txt
set "str=!str!%var%,"

Какое значение вы ожидаете %var% там?Вы устанавливаете значение и используете его в двух последовательных строках внутри блока.Вам также нужно отсроченное расширение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...