Windows
如何在一個文件中執行沒有視窗的批處理文件
由於這個問題,我知道如何在沒有視窗的情況下執行批處理文件:在沒有視窗的計劃任務中執行 .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 啟動它以進行不可見的執行。