
我編寫了一個批次腳本,它假設%1
是文件的路徑。有時我想透過Windows 資源管理器中的拖放來使用此批次腳本(將我的目標檔案拖曳到我的批次腳本檔案上),而有時我想從現有的命令提示字元視窗執行此批處理腳本並提供我的%1
明確路徑(通常只是相對路徑)。
我不希望我的腳本在“拖放”時立即消失,因此我需要這樣做pause
。但是,我不想any key to continue
在使用現有命令提示字元視窗時每次都按,因此我不希望pause
.
有沒有辦法兩全其美?我能否以某種方式檢測/推斷我所處的場景,並決定此後暫停或不暫停?這裡最好的方法是什麼?
答案1
嘗試在批次檔中使用它:
set arg0=%0
if [%arg0:~2,1%]==[:] pause
這將檢查第 0 個參數的第三個字元(基本上是批次檔名本身)是否是冒號。
通常,當您將某些內容拖放到批次檔上時,它被稱為:"Drive:\path\to\Batch File.bat" Arg1 Arg2 ...
但是,當我們從命令提示字元執行批次檔時,我們通常不傾向於這樣呼叫它,並使用帶引號的絕對路徑。因此,我們可以利用這個差異,pause
僅當冒號作為第三個字元存在時才執行 a,這意味著批次檔是透過拖放執行的。當然,如果您確實使用帶引號的絕對路徑從命令提示字元執行批次文件,那麼自然pause
也是如此。
答案2
cmd /k
在腳本末尾添加一個。在現有視窗中,它將返回到命令提示符,在新視窗中,它將執行相同的操作,保持視窗開啟。
@echo off
echo "some text"
cmd /k
請注意 /k 是為了停止列印:
Microsoft Windows [版本 6.1.7601] 版權所有 (c) 2009 Microsoft Corporation。版權所有。