篇首语:本文由小编为大家整理,主要介绍了如何让cmd命令暂停一段时间后再自动执行相关的知识,希望对你有一定的参考价值。
参考技术A 延时10秒。 需要多少秒自己改吧。。ping localhost -n 10 > nul本回答被提问者和网友采纳 参考技术B timeout /t 10 参考技术C 建议用其它语言来实现,或者是下载个sleep.exe这个文件放到C:\WINDOWS目录下。用法:sleep.exe 1d2h3m4s 表示暂停1天2时3分4秒。然后接其它命令。
确定是否已从命令行(cmd)启动/执行批处理脚本 - 或 - 要暂停还是不暂停?
我喜欢在我的cmd.exe
脚本中有一个典型的“usage:”行 - 如果缺少一个参数,用户可以简单地提醒我们如何使用脚本。
问题是我无法安全地预测潜在用户是否会使用GUI或CLI。如果有人使用GUI在资源管理器窗口中双击此脚本,他们就没有机会阅读任何内容,除非我在窗口中使用pause
。如果他们使用CLI,pause
会打扰他们。
所以我正在寻找一种方法来检测它。
@echo offif _%1_==__ ( echo usage: %nx0: filename rem now pause or not to pause?)
有一个很好的解决方案吗?
答案
你可以检查%CMDCMDLINE%
变量的值。它包含用于启动cmd.exe
的命令。
我准备了一个测试.bat文件:
@Echo Offecho %CMDCMDLINE%pause
从打开的cmd.exe
窗口内部运行时,脚本会打印"C:Windowssystem32cmd.exe"
。通过双击运行时,它会打印cmd /c ""C:UsersmbuDesktopest.bat" "
因此,要检查脚本是否通过双击启动,您需要检查%cmdcmdline%
是否包含脚本的路径。最终解决方案如下所示:
@echo offset interactive=1echo %cmdcmdline% | find /i "%~0" >nulif not errorlevel 1 set interactive=0rem now I can use %interactive% anywhereif _%1_==__ ( echo usage: %~nx0 filename if _%interactive%_==_0_ pause)
编辑:针对评论中讨论的问题更改实施的修复;编辑过的例子来演示它们
另一答案
:: exit if not interactiveecho %CMDCMDLINE% | find /i "/c"if not ERRORLEVEL 1 goto:eof
另一答案
在这里,我写了一些东西......
Usage.bat
@echo offif arg%1==arg goto helpgoto action:actionecho do something...goto end:helpset help1=This is Help line 1.set help2=This is Help line 2.cmd.exe /k "echo %help1% &echo %help2%"goto end:end
它并不完美,但它确实有效! :d
-joedf
另一答案
这只是使用内部命令。如此有效....
EnableDelayedExpansion
if "!cmdcmdline!" neq "!cmdcmdline:%~f0=!" pause >nul
要么
if not "!cmdcmdline!" == "!cmdcmdline:%~f0=!" pause >nul
DisableDelayedExpansion
if "%cmdcmdline%" neq "%cmdcmdline:%~f0=%" pause >nul
要么
if not "%cmdcmdline%" == "%cmdcmdline:%~f0=%" pause >nul
另一答案
在%cmdcmdline%中开始批量检查%WINDIR%,如下所示:
echo "%cmdcmdline%" | findstr /ic:"%windir%" >nul && ( echo Interactive run of: %0 is not allowed pause exit /B 1)
另一答案
请使用findstr
echo %cmdcmdline% | findstr /ic:"%~f0" >nul && ( pause >nul )
要么
setlocal EnableDelayedExpansion..echo !cmdcmdline! | findstr /ic:"%~f0" >nul && ( pause >nul )..endlocal
这总是奏效的......
另一答案
用于内部命令
setlocal EnableDelayedExpansionset "cmddiff=!cmdcmdline:~0,1!" & if !cmddiff! neq ^" ( pause >nul )endlocal
要么
setlocal EnableDelayedExpansionset "cmddiff=!cmdcmdline:~28,1!" & if !cmddiff! neq ^" ( pause >nul )endlocal
您可以比较不同的东西,但这只能在EnableDelayedExpansion中使用。我不认为这将永远有效,导致Windows版本等...
另一答案
类似方法......
setlocalset startedFromExplorer=echo %cmdcmdline% | find /i "cmd.exe /c """"%~0""" >nulif not errorlevel 1 set startedFromExplorer=1...if defined startedFromExplorer pausegoto :EOF
另一答案
setlocal EnableDelayedExpansionif "!cmdcmdline!" neq "!cmdcmdline:%comspec%=!" ( pause>nul )
测试在Windows 10中完成。使用%windir%,它有点危险或模棱两可。所以%comspec%是超级安全的。
以上是关于如何让cmd命令暂停一段时间后再自动执行的主要内容,如果未能解决你的问题,请参考以下文章