Я новичок в написании командных файлов;его синтаксис вызывает рвоту, поэтому я стараюсь держаться подальше.Короче говоря, мне нужен был быстрый и простой способ проверить огромное количество данных и экспортировать их в 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
У вас, ребята, есть какие-то предложения относительно того, в чем может быть проблема, или какое может быть решение?