<Target Name="TestCmd">
<Exec Command="choice /C YN /D Y /t 5 " />
</Target>
结果是:
TestCmd:
choice /C YN /D Y /t 5
EXEC : error : The file is either empty or does not contain the valid choices. [test.proj]
[Y,N]?
C:\test.proj(5,9): error MSB3073: The command "choice /C YN /D Y /t 5 " exited with code 255.
@echo off
echo.
if "%1"=="" goto askq
if "%1"=="/?" goto help
if /i "%1"=="/h" goto help
if %1 GTR 0 if %1 LEQ 9999 if /i "%2"=="/q" set ans1=%1& goto quiet
if %1 GTR 0 if %1 LEQ 9999 set ans1=%1& goto breakout
if %1 LEQ 0 echo %1 is not a valid number & goto help
if not "%1"=="" echo.&echo "%1" is a bad parameter & goto help
goto end
:help
echo SLEEP runs interactively (by itself) or with parameters (sleep # /q )
echo where # is in seconds, ranges from 1 - 9999
echo Use optional parameter /q to suppress standard output
echo or type /h or /? for this help file
echo.
goto end
:askq
set /p ans1=How many seconds to sleep? ^<1-9999^>
echo.
if "%ans1%"=="" goto askq
if %ans1% GTR 0 if %ans1% LEQ 9999 goto breakout
goto askq
:quiet
choice /n /t %ans1% /d n > nul
if errorlevel 1 ping 1.1.1.1 -n 1 -w %ans1%000 > nul
goto end
:breakout
choice /n /t %ans1% /d n > nul
if errorlevel 1 ping 1.1.1.1 -n 1 -w %ans1%000 > nul
echo Slept %ans1% second^(s^)
echo.
:end
C:\>CHOICE /?
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]
Description:
This tool allows users to select one item from a list
of choices and returns the index of the selected choice.
Parameter List:
/C choices Specifies the list of choices to be created.
Default list is "YN".
/N Hides the list of choices in the prompt.
The message before the prompt is displayed
and the choices are still enabled.
/CS Enables case-sensitive choices to be selected.
By default, the utility is case-insensitive.
/T timeout The number of seconds to pause before a default
choice is made. Acceptable values are from 0 to
9999. If 0 is specified, there will be no pause
and the default choice is selected.
/D choice Specifies the default choice after nnnn seconds.
Character must be in the set of choices specified
by /C option and must also specify nnnn with /T.
/M text Specifies the message to be displayed before
the prompt. If not specified, the utility
displays only a prompt.
/? Displays this help message.
NOTE:
The ERRORLEVEL environment variable is set to the index of the
key that was selected from the set of choices. The first choice
listed returns a value of 1, the second a value of 2, and so on.
If the user presses a key that is not a valid choice, the tool
sounds a warning beep. If tool detects an error condition,
it returns an ERRORLEVEL value of 255. If the user presses
CTRL+BREAK or CTRL+C, the tool returns an ERRORLEVEL value
of 0. When you use ERRORLEVEL parameters in a batch program, list
them in decreasing order.
Examples:
CHOICE /?
CHOICE /C YNC /M "Press Y for Yes, N for No or C for Cancel."
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "Select a for option 1 and b for option 2."
CHOICE /C ab /N /M "Select a for option 1 and b for option 2."
@echo off
set SW=00
set SW2=00
set /a Sec=%1-1
set il=00
@echo Wait %1 second
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, CC=1%%D-100, TBASE=((HH*60+MM)*60+SS)*100+CC, SW=CC
set /a TFIN=%TBASE%+%100
:ESPERAR
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100,
CC=1%%D-100, TACTUAL=((HH*60+MM)*60+SS)*100+CC, SW2=CC
if %SW2% neq %SW% goto notype
if %il%==0 (echo Left %Sec% second & set /a Sec=sec-1 & set /a il=il+1)
goto no0
:notype
set /a il=0
:no0
if %TACTUAL% lss %TBASE% set /a TACTUAL=%TBASE%+%TACTUAL%
if %TACTUAL% lss %TFIN% goto ESPERAR
5
我完全基于Windows XP功能使用以下方法在批处理文件中执行延迟:
文件DELAY.BAT
@ECHO OFF
REM DELAY seconds
REM GET ENDING SECOND
FOR /F "TOKENS=1-3 DELIMS=:." %%A IN ("%TIME%") DO SET /A H=%%A, M=1%%B%%100, S=1%%C%%100, ENDING=(H*60+M)*60+S+%1
REM WAIT FOR SUCH A SECOND
:WAIT
FOR /F "TOKENS=1-3 DELIMS=:." %%A IN ("%TIME%") DO SET /A H=%%A, M=1%%B%%100, S=1%%C%%100, CURRENT=(H*60+M)*60+S
IF %CURRENT% LSS %ENDING% GOTO WAIT
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, CC=1%%D-100, TBASE=((HH*60+MM)*60+SS)*100+CC
:: Example delay 1 seg.
set /a TFIN=%TBASE%+100
:ESPERAR
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, CC=1%%D-100, TACTUAL=((HH*60+MM)*60+SS)*100+CC
if %TACTUAL% lss %TBASE% set /a TACTUAL=%TBASE%+%TACTUAL%
if %TACTUAL% lss %TFIN% goto ESPERAR
30 回答
我们不能做
waitfor /T 180
?waitfor /T 180 pause
将导致"ERROR: Timed out waiting for 'pause'."waitfor /T 180 pause >nul
将在地毯下扫过"error"在Win95之后的Windows操作系统中应该有
waitfor
命令在过去,我已经下载了一个名为
sleep
的可执行文件,它可以在您将其放入路径后在命令行上运行 .例如:
sleep shutdown -r -f /m \\yourmachine
尽管shutdown现在内置了-t选项两个答案:
首先,要延迟批处理文件,简单地没有人们提出的所有钝角方法:
http://technet.microsoft.com/en-us/library/cc754891.aspx
其次,值得一提的是,尽管使用内置的Windows剪切工具可能无法完全满足您的需求,但您可以在不使用鼠标的情况下触发剪辑 . 运行剪切工具,从当前剪辑中退出但保持工具运行,并在希望剪辑发生时点击控制打印屏幕 . 这不应该干扰你想要剪断的东西 .
这应该可以做到:选择/ T 5 / N / D Y.
将5替换为您想要等待的时间......
我试图在msbuild任务中执行此操作,并且由于I / O重定向,选择和超时都不起作用 .
我最终使用了来自http://sourceforge.net/projects/unxutils的sleep.exe,这很不错,因为它没有't require any install and it'很小 .
尝试使用
choice
:结果是:
尝试使用
timeout
:结果是:
在旁边:
我实际上正在使用
<Exec Command="sleep 2 & dbghost.exe" />
因为我并行多次执行dbghost.exe并且它基于当前的纪元时间以秒为单位创建临时文件/数据库 - 这当然意味着如果你启动多个实例,每个实例都使用相同的临时名称 . 我原本试图使用MSBuild Extension PackThread.Sleep
命令,但似乎(通常)它运行睡眠任务很好,但是然后同时在所有线程中启动<exec>
任务,当然dbghost.exe会失败冲突 . 到目前为止,使用sleep.exe似乎更可靠 .我这样做最简单的方法是:
在http://www.sleepcmd.com/下载Sleep.exe . .exe文件应与您编写的程序位于同一文件夹中!
ping在超时之前等待约 5 seconds ,而不是如上所述的1秒 . 也就是说,除非你告诉它在超时之前只等待1秒钟 .
ping 1.0.0.1 -n 1 -w 1000
将ping一次,等待仅1秒(1000毫秒)的响应,然后超时 .
所以大约20秒的延迟是:
ping 1.0.0.1 -n 20 -w 1000
如果您有选择或ping,这可行 .
只需将其命名为sleep.cmd或sleep.bat并运行即可
尝试Choice命令 . 它自MSDOS 6.0以来一直存在,应该可以解决问题 .
使用/ T参数指定超时(以秒为单位)和/ D参数指定默认选择,然后忽略选择的选项 .
可能存在问题的一件事是,如果用户在超时期限过去之前键入其中一个选择字符 . 部分解决方法是混淆情况 - 使用/ N参数隐藏有效选择列表,并且在选择集中只有1个字符,这样用户在输入之前输入有效选项的可能性就会降低 . 超时到期 .
以下是Windows Vista上的帮助文本 . 我认为它在XP上是一样的,但请查看XP计算机上的帮助文本进行验证 .
还有两种应该适用于XP及以上版本的方法:
用w32tm
与typeperf:
没有人提到我,我感到非常惊讶:
N.B. 请注意(感谢Dan!)
timeout 5
表示:这可以通过将以下内容放入批处理文件,重复运行并计算第一个和第二个
echo
之间的时间差来凭经验验证:在Windows xp sp3中,您可以使用sleep命令
我做的 . 它正在工作,并在几秒钟内显示时间 . 如果要使用它,请添加到批处理文件:
我测试时它正在工作 .
wait.bat
的列表(它必须在工作目录或windir/system32/
中):我完全基于Windows XP功能使用以下方法在批处理文件中执行延迟:
文件DELAY.BAT
您也可以在计算中插入日期,以便在延迟时间间隔超过午夜时该方法也可以使用 .
以防您的LAN适配器不可用 .
我写了一个powerbasic程序 wait.exe ,你在批处理文件中传递一个毫秒参数
EXE的代码:
它可以通过批处理文件中的两个简单行完成:在
%temp%
文件夹中写一个临时.vbs
文件并调用它:如果您的系统上有PowerShell,则可以执行此操作命令:
编辑:人们提出了一个问题,即PowerShell启动所需的时间与您尝试等待的时间相比是显着的 . 如果等待时间的准确性很重要(即不能接受额外的两秒或两个延迟),您可以使用以下方法:
这将花费发出Windows命令的时间,并且powershell脚本将在此之后的5秒内休眠 . 因此,只要powershell启动的时间少于睡眠持续时间,这种方法就可以工作(我的机器上的时间大约为600毫秒) .
一个hack是(错误)使用ping命令:
说明:
ping是一个发送ping请求的系统实用程序 .
ping
适用于所有版本的Windows .127.0.0.1
是localhost的IP地址 . 保证此IP地址始终可以解析,可以访问,并立即响应ping .-n 6
指定有6个ping . 每次ping之间有1s延迟,因此对于5s延迟,您需要发送6次ping .> nul
抑制ping
的输出,redirecting为nul .我认为以下命令可以提供帮助:
pause命令的语法是:pause d \其中d表示以秒为单位的持续时间
我使用的是Windows 7(32位),但我不知道其他的 .
在较新的Windows操作系统版本上,您可以使用该命令
在DOS脚本(
.cmd
或.bat
)中等待2秒(2000毫秒 - 用你需要的ms替换时间) . 小心包含/w
参数 - 没有它,整个计算机都会进入睡眠状态!如果您愿意,可以使用-m
而不是/m
,并且可以选择在w和数字之间使用冒号(:) .通过使用“ping”,-n将仅在没有响应ping时确定超时 . 查看这篇关于将DELAY实现为批处理文件的帖子 .
DELAY command implemented as a Batch File
我可以复制粘贴重要的位,但整个帖子非常有用 .
SLEEP 5
包含在某些Windows资源工具包中 .TIMEOUT 5
包含在某些Windows资源工具包中,但现在是Windows 7和8中的标准命令(不确定Vista) .PING 1.1.1.1 -n 1 -w 5000 >NUL
对于具有TCP / IP客户端的任何MS-DOS或Windows版本,PING可用于延迟执行数秒 .NETSH badcommand
(仅限Windows XP / Server 2003)或CHOICE
this link will help you more .
你可以使用
timeout
:这将是可见的:
timeout 5
这将不可见
timeout 5 >nul
Timeout /t 1 >nul
就像在1秒内暂停一样,你可以将点击率提高到接近100.000(99.999)秒 . 如果您连接到互联网,最佳解决方案是:
ping 1.1.1.1. -n 1 -w 1000 >nul
当您ping时,以毫秒为单位计算,因此一秒钟将为1000毫秒 . 但ping命令有点不确定,它在离线机器上的工作方式不同 . 问题是机器因为离线而感到困惑,并且想要ping一个
website/server/host/ip
,但它不能 . 所以我建议超时 . 祝好运!创建一个名为sleep.cmd的cmd文件:
将sleep.cmd复制到c:\ windows \ system32
用法:
睡眠0.5秒 . ms中的参数 . 一旦复制到System32,就可以在任何地方使用 .
编辑:你也应该离开,如果机器没有连接到网络(比如你在地铁中使用的便携式设备),ping技巧就不再适用了 .
这是我在实践中使用的最新版本,在脚本完成时看到输出的十秒钟暂停 .
完成的回显允许我查看脚本何时完成并且ping提供延迟 . 额外的@符号意味着我看到“完成”文本并且等待发生而没有我被他们的命令分心 .
我已经尝试过在XP机器上给出的各种解决方案,因为我们的想法是拥有一个可以在各种机器上运行的批处理文件,因此我选择了XP机器,因为环境可能是最不具备能力的 .
这似乎按预期延迟了三秒钟 . 一次ping尝试持续指定的3秒 .
这需要大约10秒钟(不是5秒) . 我的解释是有5次ping尝试,每次尝试大约相隔一秒,制作4秒 . 并且每次ping尝试可能持续大约一秒钟,总共估计9秒 .
命令不可用 .
我也尝试了上述内容,在阅读之后,可以使用两个连续的冒号将注释添加到BAT文件中 . 然而,该软件几乎立即返回 . 在ping之前将注释放在自己的行上工作正常 .
为了更好地理解ping在实践中的作用,我跑了
这需要大约30秒,即使5 * 5 = 25 . 我的解释是有5次ping尝试,每次持续5秒,但ping尝试之间有大约1秒的时间延迟:毕竟没有理由期待一个如果你立即再次ping不同的结果,最好给网络一点时间从它遇到的任何问题中恢复 .
编辑:从another post窃取,.. RFC 3330表示IP地址192.0.2.0不应出现在互联网上,因此ping这个地址会阻止这些测试向任何人发送垃圾邮件!我相应地修改了上面的文字!
用户Aacini提出的代码的改进,它具有百分之一秒的分辨率,并且当时间达到23:59:59,99时不会失败:
如果您有适当版本的Windows和Windows Server 2003 Resource Kit Tools,则它包含批处理程序的睡眠命令 . 更多信息:http://malektips.com/xp_dos_0002.html
您可以使用VBScript,例如,文件
myscript.vbs
:批处理文件: