Господа! а что вы именно разумеете под штатными средствами? Учитывая, что .NET Framework ныне стал необходимостью для большинства пользователей, можно использовать его возможности.
::///////////////////////////////////////////////////////////////////////////////////////////////
::
:: (C) 2012 forum.script-coding.com (written by greg zakharov)
::
::///////////////////////////////////////////////////////////////////////////////////////////////
@echo off
setlocal
::
::source for a sleep.exe
::
%1 > "%~dp0src.cs" (
echo using System;
echo using System.Threading;
echo using System.Reflection;
echo.
echo [assembly: AssemblyVersion^(^"2.0.0.0^"^)]
echo.
echo class Program
echo {
echo static void Main^(string[] args^)
echo {
echo if ^(args.Length == 1^)
echo {
echo int tik;
echo bool test = int.TryParse^(args[0], out tik^);
echo.
echo if ^(test == false^)
echo Console.WriteLine^(^"Error has been occured. Probably, you specified not a number.^"^);
echo else
echo Thread.CurrentThread.Join^(tik^);
echo }
echo }
echo }
)
::
::getting .NET Framework path for compilation
::
set key=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
set raw="%key%\%%i"
for /f "tokens=7 delims=\" %%i in ('reg query %key% ^| findstr ".NET"') do (
for /f "skip=4 tokens=3" %%j in ('reg query %raw% /v InstallLocation') do (
set path=%path%;%%j
)
)
::
::compiling
::
csc.exe /nologo /t:exe /out:"%~dp0sleep.exe" /r:System.dll "%~dp0src.cs"
::
::test assembly - sleep 10 sec.
::
echo Right, this is only test! Standby...
"%~dp0sleep.exe" 10000
echo Test is OK. Terminating sleep.exe and its source...
del /f /q "%~dp0sleep.exe" "%~dp0src.cs"
echo All done...
endlocal
exit /b
Может, подход несколько порочный, но у него есть один плюс - нет назгрузки на ЦП.