題 在啟動時使用.cmd等待系統範圍的啟動運行


在電腦上,我  管理員,有一個啟動文件(C:\ Documents and Settings \中的.cmd文件)所有用戶\ Start Menu \ Programs \ Startup)適用於所有用戶。它做了幾件我不喜歡的事情,所以我創建了自己的.cmd文件,它放在C:\ Documents and Settings \中[用戶]\開始菜單\程序\啟動。

我想讓我的代碼運行  系統範圍廣,因為我的程序首先取消系統範圍文件所做的網絡映射,然後用我自己的網絡映射替換它。如何在系統範圍內完成後立即等待和啟動程序? (我無法刪除或編輯系統範圍的文件)。

謝謝

編輯: 系統範圍文件運行所用的時間各不相同,我希望我的文件能夠立即運行。由於系統範圍的腳本可以更改或文件可以移動,因此“If Exists”方法似乎有點偶然。我希望將我的腳本交給我的幾個同事,所以我希望能讓它工作,而不必更新任何東西。另外,作為一個linux傢伙,我不知道cmd代碼,所以請寫出任何編碼建議。


3
2018-06-03 22:22


起源




答案:


如果您無法訪問“所有用戶”啟動.bat文件,那麼您嘗試做的事情有點困難,如果您所做的就是編輯它,以便在執行完所有命令之後

"call Mycoolbatchfile.bat" 

由於這不是一個選項,我的解決方案是編寫以下代碼 AutoIt的

Global $SystemWideScript = "Admin.bat"

Func MountNetworkDrv($drv,$path)
    ShellExecute(@SystemDir & "\net.exe ","use " & $drv & " " & $path,"","",@SW_HIDE)
EndFunc

While 1
    For $i = 1 To 100

        ;Wait for the Batch script to finish executing
If ProcessExists($SystemWideScript) = 0 Then

    ;The system wide "All Users" batch script is not running so we can execute
MsgBox(0,"Custom Network Drives","I Cannot detect " & $SystemWideScript & " running so i'm executing")

MountNetworkDrv("G:","\\192.168.1.2\logs")


MountNetworkDrv("Y:","\\Server\CoolStuff")

Exit
EndIf
Next
Sleep(2000)
Wend

這只是我對這個問題的觀點(其中之一)。


2
2018-06-07 14:40





如果您使用的是Windows Vista / Windows 7,我會使用任務計劃程序(開始 - >所有程序 - >附件 - >系統工具)。您可以告訴Windows在登錄後運行.cmd一段指定的時間,例如30秒。


5
2018-06-04 00:30



我也絕對推薦這種方法。 - Joshua
@Dan如果你需要它運行 立即 在全局腳本之後,知道它何時退出的唯一方法是知道進程名稱並註意它的退出(可以從任務調度程序執行,觸發/在事件/應用程序/進程退出),否則只需等待最大值無論全局腳本的名稱如何,時間都將起作用。 - Darth Android


如你所說,你想等到網絡映射。 @Mike Fitzpatrick是對的。

:start
REM 檢查文件系統是否已安裝
IF EXIST L:\somefile GOTO okay
PING -n 2 127.0.0.1 > nul
goto start
:okay
REM 在這裡做惡事
 

注意 ping -n 2 127.0.0.1 > nul 是在窗口等待一段時間。


1
2018-06-07 14:25



注意:等待時間是為了防止批處理文件不斷循環 - bubu
我仍然擔心系統啟動文件的更改,這可能會使我的腳本無效......但是如果沒有更好的替代方案......有沒有辦法讓它有一個> 15秒會自動轉到:好的?另外,我可以在文件夾而不是文件上執行此操作嗎? - Jarvin
只需將-n 2更改為-n 15,然後刪除goto start我認為您需要在文件上執行此操作 - bubu


我意識到你正在尋找一個技術解決方案,上面有一些很好的建議,但首先,你可能想要考慮與你的IT部門交談,看看他們是否可以調整一些事情,而不是一開始就惹惱你,特別是如果其他同事也想改變這種狀況。我想他們可能不會輕易自行撤消他們正在實施的設置。

如果你決定繼續這樣做,一種可能性就是在開始菜單的啟動文件夾中放一個快捷方式。在Explorer啟動之前,該文件夾中的項目不會運行,並且通常在啟動腳本運行之後才會啟動資源管理器。

另一種方法就是擁有 sleep 10 在批處理文件的開頭。 sleep命令沒有內置到windows中,但可以作為一部分下載 Windows服務器管理工具


1
2018-06-07 23:36





做一個 if exist 你知道某個文件存在於你不想映射的最後一個映射驅動器上,循環(暫停幾秒)直到它確實存在,然後執行其餘的腳本。

編輯:

IF EXIST 只需一個根文件夾就可以正常工作,這樣你就可以看到是否安裝了驅動器盤符,而不必擔心該驅動器上的特定文件。 (減少偶然性)

我喜歡@bubu的使用 ping 介紹延遲,但@ nhinkle的建議安裝 sleep 更清潔。

基於@bubu的代碼:

REM 可選的初始睡眠
睡15
:開始
REM 檢查文件系統是否已安裝
如果存在L:\ GOTO沒關係
睡覺5
轉到開頭
:好的
REM 在這裡做惡事

1
2018-06-04 00:14



你可以看到我是來自地獄的混蛋操作員之一。我同意,使用“睡眠”更整潔。 - bubu