すでに同様の質問に答えたことは知っています(Windows の起動時にバックグラウンドでバッチ ファイルを実行する) ですが、今回はバッチを起動する必要があります。
- 別のバッチから、
- コンソールウィンドウが表示されず、
- すべての引数付き目に見えないバッチに渡されます。
最初のバッチはコンソールウィンドウで実行されます。しかし、2番目のバッチ(最初のバッチによって起動された)は、非同期方式) をクリックすると、コンソール ウィンドウも表示されます。
私はまさにそれを実現するVBScriptスクリプトを思いつきました。そして、そのスクリプトを他の人が参照するための回答ただし、他のアイデアや解決策がある場合は、遠慮なく貢献してください。
注意: Windows コマンド プロセッサのコンソール ウィンドウは、多くの人によって、実際には正しい DOS ウィンドウとは呼ばれていません。
回答していただきありがとうございました。私が理解しているところによると、スクリプトを非同期的に呼び出して非表示モードで実行する必要がある場合は、次のようになります。
- コンソールウィンドウに既にある2番目のスクリプトから、
start /b
十分です。 - Windowsから、2番目のウィンドウをトリガーせずに私の解決策は今でも有効です。
ベストアンサー1
考えられる解決策は次のとおりです:
最初のスクリプトから、次の行を使用して 2 番目のスクリプトを呼び出します。
wscript.exe invis.vbs run.bat %*
実際には、次のように vbs スクリプトを呼び出します。
- スクリプトの[パス]\名前
- スクリプトに必要なその他のすべての引数 (
%*
)
その後、invis.vbsはスクリプトを呼び出します。Windows Script Host の Run() メソッド、これには以下が含まれます:
- intWindowStyle : 0 は「非表示のウィンドウ」を意味します
- bWaitOnReturn : false は、最初のスクリプトが 2 番目のスクリプトの終了を待つ必要がないことを意味します。
invis.vbs は次のとおりです。
set args = WScript.Arguments
num = args.Count
if num = 0 then
WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
WScript.Quit 1
end if
sargs = ""
if num > 1 then
sargs = " "
for k = 1 to num - 1
anArg = args.Item(k)
sargs = sargs & anArg & " "
next
end if
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False