#batch-file #pass-by-reference
#пакетный файл #передача по ссылке
Вопрос:
Я нахожусь в такой ситуации, когда у меня есть один пакетный файл, который создает кучу переменных, затем запускает (с start /w "file.batch"
) другой пакетный файл, который использует и изменяет переменные из первого пакетного файла.
Теперь это работает нормально, пока второй файл не закроется сам и не вернется к первому файлу, потому что переменные, которые были изменены вторым файлом, являются не ссылками, а фактически копиями исходных переменных, что означает, что они больше не были связаны с исходными переменными. Это делает второй скрипт практически бесполезным.
Я знаю, что call "file.batch"
это привело бы к запуску второго файла в той же среде, что устранило бы проблему, но я хочу, чтобы второй файл запускался в отдельном окне, чего call "file.batch"
не происходит.
Вот краткая демонстрация проблемы:
Файл 1:
@echo off
set $var=0
echo before starting file 2: %$var%
start test02.bat
echo after starting file 2: %$var%
echo before calling file 2: %$var%
call test02.bat
echo after calling file 2: %$var%
pauseamp;exit
Файл 2:
@echo off
echo inside file 2: %$var%
set $var=1
echo inside file 2: %$var%
exit /b 0
Вывод:
before starting file 2: 0
inside file 2: 0
inside file 2: 1
after starting file 2: 0
before calling file 2: 0
inside file 2: 0
inside file 2: 1
after calling file 2: 1
Комментарии:
1. Нет. Нет. Это хорошо известно.
2. Хорошо.. Единственным способом было бы выполнить цикл, чтобы проверить, выполняется ли второй пакет, если нет, запустить его и только затем выполнить эхо-обработку, но это действительно много работы по сравнению с тем, где вы могли бы просто вызвать файл.
3. Спасибо за ответы, я сделаю это, сохранив весь текст echo’d в массиве, чтобы, когда часть консоли должна быть очищена, текст над ней можно было восстановить