Как я могу перемещать переменные между пакетными программами - PullRequest
0 голосов
/ 10 февраля 2019

Я хотел бы знать, как отправить набор переменных в одном пакетном файле в другой.Так, например, у меня есть:

program.bat

@echo off
set /p amount="Amount:"
set a=0
set /p text="Text:"
:loop
set /a a+=1
start myecho.bat
if %a% LSS %amount%
exit

А теперь вторая программа с именем myecho.bat, которая покажет переменную text от первого program.bat

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вы можете просто использовать переменную во втором пакетном файле (, если вы вызываете ее из первого , поскольку процесс call ed выполняется в той же среде / наследует среду в start ред. Процесса).

first.bat:

@echo off
set "test=Hello"
call second.bat 

second.bat:

echo variable 'test' is: %test%

Если вы хотите передать значение переменной, лучше использовать параметр:

first.bat:

@echo off
set "test=Hello"
call second.bat %test%
REM that's the same as:
call second.bat Hello

second.bat:

@echo off
echo parameter is: %1

(см. call /? для использования параметров)

(оба примера выполняютсяс call или start)

0 голосов
/ 11 февраля 2019

• Обновление • Существует другой способ сделать это , записав переменных в bat it self и используйте другую биту, чтобы прочитать эту первую биту с переменными .

1), используя reg add / reg query (setx)

Для этого вы можете использовать setx, но значение из setx

будет доступно только после следующего instance / session в то время, когда это установлено, с помощью cmd / powershell

Кроме того, setx можно установить с помощью reg add:

По reg add: `reg add HKCU \ Environment / v _amount / d " %ount% " / f

По команде setx: setx _amount"% amount%"

Для чтения значения перед следующим экземпляр / сеанс : для / f "токены = 3 delims = ^" %% i in ('запрос reg HKCU\ Environment ^ | findstr / i / c: "_ amount" ') действительно установить _amount = %% i

Так, в другом * экземпляре / сеансе переменная находится вСистема, просто сделайте, если нужно: установить сумму =% _ сумма%

@echo off
set /p amount="Amount:"
setx _amount "%amount%"
set a=0
set /p text="Text:"
:loop
set /a a+=1

start myecho.bat 

:: add this lines lines if ..( ...)  in file "myecho.bat" :: 
if "./%_amount%/." equ ".//." (

     for /f "tokens=3 delims=^ " %%i in ('reg query HKCU\Environment ^| findstr /i /c:"_amount"') do set _amount=%%i

     ) else (

     set amount=%_amount%

     )

  if %a% LSS %amount% echo/ do some thing
  exit

Когда вам больше не нужна переменная, вы можете удалить / удалить ключ setx / reg с помощью:

reg delete HKCU\Environment /v _amount /f 2>nul >nul

2) с помощью файла TXT для сохранения и чтения ...

Запись значения1-й бит в% temp% \ file.txt и чтение 2-й бит:

@echo off
set /p amount="Amount:"
echo/%amount%>"%temp%\amount_value_in.txt"
set a=0
set /p text="Text:"
:loop
set /a a+=1

start myecho.bat 

:: add this lines lines if ..( ...)  in file "myecho.bat" :: 

set /p amount=<"%temp%\amount_value_in.txt"

if %a% LSS %amount% echo/ do some thing

exit

3) с помощью переменной send для прямого запуска start.bat% amount% ...

@echo off
set /p amount="Amount:"
echo/%amount%>"%temp%\amount_value_in.txt"
set a=0
set /p text="Text:"
:loop
set /a a+=1

start myecho.bat %amount% 

:: add this lines lines if ..( ...)  in file "myecho.bat" :: 
set amount=%1      
if %a% LSS %amount% echo/ do some thing
exit

Obs.:

1- Извините, мой ограниченный Английский

2- Вы можете заменить старт по вызов

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