Я предлагаю использовать команду CALL
.Пример из Пакетные файлы :
Листинг Batch1.bat:
REM Batch1.bat
SET ABC=1
CALL BATCH2.BAT %ABC%
ECHO ABC = %ABC%
BATCH2.BAT %ABC%
ECHO ABC = %ABC%
, где листинг Batch2.bat:
REM Batch2.bat
SET ABC=%ABC%%1
РЕДАКТИРОВАТЬ: на основе отзывов @Andriy M, вот улучшенная версия для двух партий:
Партия 1:
@ECHO OFF
REM Batch1.bat
SET ABC=1
CALL batch2.bat %ABC%
ECHO 1. ABC = %ABC%
CALL batch2.bat %ABC% REM test this line with CALL and without
ECHO 2. ABC = %ABC%
Партия 2:
@ECHO OFF
REM Batch2.bat
SET tmout=5
echo sleeping %tmout% seconds...
REM this introduces a timeout by using a nonexistent ip address
PING 1.2.1.2 -n 1 -w %tmout%000 > NUL
echo done sleeping
SET ABC=%ABC%%1
Смотрите строку в batch1, где я написал комментарий протестируйте эту строку с CALL и без .Запустите этот пакет дважды, с этой строкой, имеющей CALL
и без CALL
.
Вывод с консоли без CALL
:
C:\temp>batch1.bat
sleeping 5 seconds...
done sleeping
1. ABC = 11
sleeping 5 seconds...
done sleeping
А теперьвывод с консоли с CALL
:
C:\temp>batch1.bat
sleeping 5 seconds...
done sleeping
1. ABC = 11
sleeping 5 seconds...
done sleeping
2. ABC = 1111
Обратите внимание на разницу: мы получаем 2-е эхо, qed