Windows

如何在一個文件中執行沒有視窗的批處理文件

  • October 16, 2014

由於這個問題,我知道如何在沒有視窗的情況下執行批處理文件:在沒有視窗的計劃任務中執行 .bat 文件

第一個答案是我正在使用的答案。它指出要在沒有視窗的情況下執行批處理文件,請創建以下 vbs 文件並改為執行 vbs 文件。

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing

我的問題是是否可以僅在一個文件中執行此操作。(以某種方式結合了 vbs 腳本和批處理文件腳本)上面的答案需要兩個文件,因為 vbs 文件指的是批處理文件。如果可能,將如何實現?

在腳本中,創建一個臨時文件並將批處理文件寫入其中。然後從臨時文件執行腳本。完成後刪除臨時文件。

理想情況下,將臨時文件寫入其他使用者無法訪問的位置,因為那裡可能存在可用於提升權限的競爭條件。

http://www.dostips.com/forum/viewtopic.php?f=3&t=5543中記錄了許多創建混合腳本的方法。

我在https://stackoverflow.com/q/9074476/1012053列出了多種創建混合 VBS/批處理的方法。

但是,創建混合 JScript/batch 要容易一些,所以我將在此處介紹該解決方案。

大多數混合程序首先執行批處理部分,然後通過 CScript 執行 VBS 或 JScript。但在您的情況下,您想先執行 JScript,然後執行批處理腳本。請注意,腳本仍必須具有.bat副檔名才能執行批處理腳本。JScript 首先通過帶有//e:jscript選項的 WScript 執行。

這是一個簡單的混合腳本,應該可以解決問題:

@if (@X)==(@Y) @end /* harmless hybrid line that begins a JScript comment
::************ Batch portion ***********
@echo off

:: Your batch code goes here

exit /b
************ JScript portion ***********/
var objShell = new ActiveXObject("WScript.shell");
objShell.run(WScript.ScriptFullName,0);

計劃任務的完整命令行應類似於:

C:\Windows\System32\wscript.exe //e:jscript "C:\Scheduled Jobs\mybat.bat"

此解決方案的一個特別好的功能是您可以直接執行批處理腳本,它將在可見的 cmd.exe 視窗中正常執行,或者您可以通過 WSCRIPT 啟動它以進行不可見的執行。

引用自:https://serverfault.com/questions/637346