2011-08-05 35 views
0

例如我可以直接撥打myscript.cmd或在其他腳本中我可以將一行寫入myscript。是否有可能區分shell從命令行或從其他shell運行?

原因是,如果一個腳本自己運行,它會在它停止執行時消失,所以我看不到結果,所以最後我必須添加@pause,但是當我從另一個shell運行它時這會導致煩惱,因爲控制檯窗口不會以這種方式退出。

所以我尋找某種'如果'的條件來解決這個問題。

+2

見http://stackoverflow.com/questions/5859854/detect-if-bat-file-is-running-via-double-click-or-from-cmd-window – sakra

+1

哇,有趣。我從來不知道%cmdcmdline%,因爲它不顯示在env變量列表中。有你的解決方案,rsk82。 –

回答

1

爲了讓您的腳本暫停時雙擊(或通過刪除裏面的文件),但終止通常的方式從控制檯調用時:

@echo off 

echo Hello World! 

:: ...your ScriptCode... 

(((echo.%CMDCMDLINE%)|find /I "%~0")>NUL)&&pause 
+0

非常感謝。聰明的黑客。 – rsk82

0

爲什麼不自己設置它?

SET RUNNINGFROMOTHERSHELL=YES 
CALL MYSCRIPT.CMD 
SET RUNNINGFROMOTHERSHELL= 

在MyScript.Cmd:

IF "%RUNNINGFROMOTHERSHELL%"=="" GOTO NOPAUSE 
PAUSE 
:NOPAUSE 
+0

從開始 - >運行窗口啓動cmd.exe時,手動設置變量是沒有意義的,它比暫停本身更糟糕。也許我應該尋找那些在這兩種情況下都不同的變量,但沒有完全針對此的目的。 – rsk82

+0

你從開始 - >運行時不會做。這是完整的一點。順便說一下,沒有任何環境變量是不同的。嘗試一下。 – Stu

+0

我想你是對的,但我真的不明白它是如何工作的,我在哪裏設置這個變量? MyScript是我運行的,我在資源管理器中單擊的,但我也可以運行cmd.exe,然後在那裏cd到文件夾並運行我的sript,但似乎我應該把它放在anoter文件中,從我稱之爲腳本的地方,什麼文件?然後我必須記住什麼時候打電話給我。 – rsk82

1

除非你創建一個環境變量像斯圖建議,你不會找到任何你想要的東西做到這一點。您將需要編寫一個小程序,以編程方式查詢父進程並返回您的腳本可以檢查的值。如果你從開始 - >運行你的父母將是explorer.exe。否則,它將是cmd.exe或其他一些exe文件。

查找父進程的示例代碼可以找到here

+0

用什麼程序我必須編譯這段代碼? – rsk82

+0

Visual Studio將是Windows平時的選擇。 –

+0

我沒有。它花錢?對 ? – rsk82