簡體   English   中英

Windows批處理:在由一個稱為“批處理”的cmd窗口中運行命令?

[英]Windows Batch: Run command in cmd window opened by a called batch?

我想運行一個批處理文件A,它調用/啟動另一個批處理文件B,這將打開一個新的cmd窗口。 然后,我想在此新的cmd窗口中運行用戶定義的命令。 僅在運行文件B之后或在此新的cmd窗口中才能識別此命令,但是命令本身的調用應寫入文件A中(文件B已設置且不能更改)。 我怎樣才能做到這一點?

據我了解的行為,我無法訪問由另一個批處理文件打開的cmd窗口。 我編寫了一個簡單的測試用例來向您展示問題,請參見下文。

我已經嘗試callstart 如果我在cmd窗口中手動運行批處理文件B,則可以在同一窗口中運行用戶定義的命令,因為當前的cmd窗口是“更新的”並且可以識別該命令。

一個簡單的測試用例:在此示例中,文件A中call scriptB.bat之后的所有命令都將被忽略(可能是因為這些命令在舊的cmd窗口中運行,而該命令已被在B中打開的新cmd窗口“覆蓋”,該窗口現在處於活動狀態) )。 如何將命令(尤其是用戶定義的命令)傳遞給新的cmd窗口?

scriptA.bat:

@echo off

echo Start script!
call scriptB.bat
%user_command%
echo End script!
pause

scriptB.bat:

@echo off

set user_command=echo USER COMMAND!
cmd

輸出:

Start script!
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
*my Path*>

重新閱讀Q后,很明顯,用戶希望在兩個腳本中都設置變量,然后以某種方式將腳本B中設置的值替換為腳本A中設置的值。

如果不更改腳本B以使用WMIC從注冊表中讀取變量名的信息,並讓腳本A使用SetX ,或者使腳本A寫入文件並從文件中讀取腳本B,那么這是不可能的。

但是,由於腳本A可能會在腳本B檢查之前或之后設置該值,因此這會創建競賽條件。

進一步的腳本B無論如何都無法修改,如果可以的話,可以將其設置為在腳本A中使用普通的SET命令,然后讓腳本B使用這些變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM