不過
其實個人有做了一個確保無外部檔案被讀取的情況
也就是直接執行這個自隱的批次檔
如下: if '%1' == 'hide' goto begin echo '%1'>%TEMP%\TTT.log mshta vbscript:createobject("wscript.shell").run("""%~f0"" hide",0)(window.close) && exit :begin for /f "delims='" %%i in (%TEMP%\TTT.log) do set "TTT=%%i" if '%TTT%' == 'ECHO 已關閉。' set "TTT=" "C:\Windows\System32\notepad.exe" %TTT%
發現使用單引號才有反應
猜想應該是%1所抓到的絕對路徑
系統預設就會加上雙引號框
而在 if '%TTT%' == 'ECHO 已關閉。' set "TTT="
如果改成雙引號 if "%TTT%" == "ECHO 已關閉。" set "TTT="
但前提是
%1不能沒定義(也就是直接執行批次檔,卻沒有把目標檔案拖到批次檔上)
換言之
從批次檔外部一定要帶入任何字串
若%1沒定義
則if這條命令會變成 if == hide goto begin
然後就GG了
這個道理在把%1阻絕於境外後
用AAA來判斷
才猛然領悟
所以為了確保批次檔內%1無定義時不會GG
if判斷中還是加上單引號了
如下: set AAA=%1 if '%AAA%' == 'hide' goto begin if not defined AAA ( echo "">%TEMP%\TTT.log ) else echo %AAA%>%TEMP%\TTT.log mshta vbscript:createobject("wscript.shell").run("""%~f0"" hide",0)(window.close) && exit :begin for /f "delims=" %%i in (%TEMP%\TTT.log) do set "TTT=%%i" "C:\Windows\System32\notepad.exe" %TTT%