在启动时让 .cmd 等待系统范围的启动运行

在启动时让 .cmd 等待系统范围的启动运行

在电脑上不是管理员,有一个启动文件(.cmd 文件在 C:\Documents and Settings\全部用户\Start Menu\Programs\Startup) 适用于所有用户。它做了一些我不喜欢的事情,所以我创建了自己的 .cmd 文件,并把它放在 C:\Documents and Settings\[用户]\开始菜单\程序\启动。

我希望我的代码能够运行系统范围的,因为我的程序首先撤消了系统范围文件所做的网络映射,然后用我自己的网络映射替换它。我怎样才能让我的程序等待并在系统范围文件完成后立即启动?(我无法删除或编辑系统范围文件)。

谢谢

编辑:系统范围的文件运行所需的时间各不相同,我希望我的文件在运行之后立即运行。“如果存在”方法似乎有点不确定,因为系统范围的脚本可能会更改,或者文件可能会被移动。我希望将我的脚本提供给我的几个同事,这样我就希望它能够在我不需要更新任何内容的情况下工作。另外,作为一个 Linux 人,我不懂 cmd 代码,所以请写出任何编码建议。

答案1

如果您无权访问“所有用户”启动 .bat 文件,那么您尝试做的事情会有点困难,如果您这样做,您所要做的就是编辑它,以便在执行完所有命令后,您将

"call Mycoolbatchfile.bat" 

由于这不是一个选项,我的解决方案是编写以下代码汽车信息技术

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

如果您使用的是 Windows Vista/Windows 7,我会使用任务计划程序(开始 -> 所有程序 -> 附件 -> 系统工具)。您可以告诉 Windows 在登录后运行 .cmd 指定的时间,例如 30 秒。

答案3

正如您所说,您想等到网络映射。@Mike Fitzpatrick 是正确的。

:start
REM check if the filesystem has been mounted
IF EXIST L:\somefile GOTO okay
PING -n 2 127.0.0.1 > nul
goto start
:okay
REM DO EVIL STUFF HERE

请注意,这ping -n 2 127.0.0.1 > nul需要在 Windows 中等待一段时间。

答案4

if exist对某个您知道存在于最后一个映射驱动器上但您不想映射的文件执行操作,循环(暂停几秒钟)直到它存在,然后执行脚本的其余部分。

编辑:

IF EXIST只需一个根文件夹即可正常工作,因此您可以查看驱动器号是否已安装,而不必担心该驱动器上是否有特定文件。(不太偶然)

我喜欢@bubu 的使用ping来引入延迟,但是@nhinkle 的安装建议sleep更简洁。

根据@bubu 的代码:

快速眼动 (REM)可选的初始睡眠
睡眠 15
:开始
快速眼动 (REM)检查文件系统是否已挂载
IF EXIST L:\ GOTO 确定
睡 5
转到开始
:好的
快速眼动 (REM)在这里做坏事

相关内容