<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Breazile's Blog</title><link>http://blogs.msdn.com/breazile/default.aspx</link><description>If at first you don't succeed, skydiving is not for you.</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>DNS Resolution Bottleneck in Windows Server 2000/2003 and Windows XP</title><link>http://blogs.msdn.com/breazile/archive/2008/02/25/dns-resolution-limitation-in-windows-server-2003.aspx</link><pubDate>Tue, 26 Feb 2008 03:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7897568</guid><dc:creator>breazile</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/breazile/comments/7897568.aspx</comments><wfw:commentRss>http://blogs.msdn.com/breazile/commentrss.aspx?PostID=7897568</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=verdana,geneva color=#006600 size=3&gt;&lt;STRONG&gt;Summary&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva&gt;DNS name resolution was failing on a Windows 2003 server when we tried to access SYSVOL shares from our Domain Controllers. This only seemed to happen when we referenced the share by fully qualified domain name (FQDN). It was not hard to reproduce the failure by typing the following command:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;C:\&amp;gt;dir \\DC-01.somedomain.com\SYSVOL&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;The network path was not found.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva&gt;I'm using simulated server and domain names here, but you get the idea. If you&amp;nbsp;reference the share by short name, there was never any problem.&lt;/FONT&gt;&lt;FONT face=verdana,geneva&gt;&amp;nbsp;The command &lt;FONT face="Courier New" color=#3300ff&gt;dir \\DC-01\SYSVOL&lt;/FONT&gt;&amp;nbsp;would work just fine.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#006600 size=3&gt;&lt;STRONG&gt;Digging Deeper...&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva&gt;I captured the network traffic, and found that there were no DNS queries on the wire. I knew something was going on with the client resolver, and this was not a DNS server issue. I setup a test environment where I was able to reproduce the problem. Run the following script in two or three different CMD windows, and you should see an error:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;@echo off&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:loop&lt;BR&gt;call :CheckServer DC-01&lt;BR&gt;call :CheckServer DC-02&lt;BR&gt;call :CheckServer DC-03&lt;BR&gt;call :CheckServer DC-04&lt;BR&gt;call :CheckServer DC-05&lt;BR&gt;call :CheckServer DC-06&lt;BR&gt;call :CheckServer DC-07&lt;BR&gt;call :CheckServer DC-08&lt;BR&gt;call :CheckServer DC-09&lt;BR&gt;call :CheckServer DC-10&lt;BR&gt;call :CheckServer DC-11&lt;BR&gt;call :CheckServer DC-12&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;sleep.exe 1&lt;BR&gt;goto :loop&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:CheckServer&lt;BR&gt;if exist "\\%~1.somedomain.com\SYSVOL" goto :EOF&lt;BR&gt;if not exist "\\%~1\SYSVOL" goto :EOF&lt;BR&gt;if exist "\\%~1.somedomain.com\SYSVOL" goto :EOF&lt;BR&gt;echo %DATE% %TIME% - %1&lt;BR&gt;goto :EOF&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;This test&amp;nbsp;script requires the sleep command from the &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&amp;amp;displaylang=en"&gt;Windows Server 2003 Resource Kit Tools&lt;/A&gt;. I started isolating the problem once I had reproduced it in the lab. My first step was to &lt;/FONT&gt;&lt;FONT face=verdana,geneva&gt;add all of the server names by FQDN&amp;nbsp;to the hosts file. I wanted to see if this was a problem with BIND, or some other system component. As it turned out, the problem persisted even though all of the names were hard coded in the hosts file. I enabled ETW tracing of NetBT to see what was going on. The test script prints a time stamp when a failure occurs, so I looked at the ETW log entries for the same time stamp. I saw a lot of STATUS_TIMEOUT errors, and discovered the resolution request was timing out. It appeared we had a resource issue with name resolution.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva color=#006600 size=3&gt;&lt;STRONG&gt;The Problem&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva&gt;NetBT processes name resolution requests serially, and if you queue enough of them they will start to time out. The official explanation is described under the cause section of KB article &lt;A class="" href="http://support.microsoft.com/default.aspx?scid=KB;EN-US;875441" mce_href="http://support.microsoft.com/default.aspx?scid=KB;EN-US;875441"&gt;875441&lt;/A&gt;, but I'll summarize here:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva&gt;"When the name resolution request for FQDN is queued inside NetBT, the request times out, the redirector closes the connection after about eight seconds, and the FQDN name is not resolved. The issue occurs because of contention for the NetBT user mode DNS resolver. This resolver can only resolve names serially."&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva color=#006600 size=3&gt;&lt;STRONG&gt;The Solution&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva&gt;That KB article was not an exact match for the problem we were dealing with here, but it's close enough. I tried workaround #1, and adjusted the &lt;FONT color=#3300ff&gt;&lt;A class="" href="http://technet2.microsoft.com/windowsserver/en/library/fbceeda3-6ec1-4833-8cfc-46b2d5271e3b1033.mspx?mfr=true" mce_href="http://technet2.microsoft.com/windowsserver/en/library/fbceeda3-6ec1-4833-8cfc-46b2d5271e3b1033.mspx?mfr=true"&gt;LmhostsTimeout&lt;/A&gt;&lt;/FONT&gt; to 20 seconds. That improved things, but I was still able to reproduce the problem. As it turns out, workaround #2 solved this problem once and for all. When you install IPv6, the system will use the resolver in smb.sys instead of NetBT, and that eliminates the resource contention. You can run the IPv4 and IPv6 stacks side by side, so you don't have to worry about changing your infrastructure to solve this problem. NetBT is legacy, so Vista and Windows Server 2008 use smb.sys by default.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#006600 size=3&gt;&lt;STRONG&gt;Links&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://support.microsoft.com/default.aspx?scid=KB;EN-US;875441"&gt;&lt;FONT face=verdana,geneva&gt;http://support.microsoft.com/default.aspx?scid=KB;EN-US;875441&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7897568" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/breazile/archive/tags/Operational+Pain/default.aspx">Operational Pain</category></item><item><title>Converting File Times - 64 bit math using only built-in DOS commands</title><link>http://blogs.msdn.com/breazile/archive/2008/02/22/converting-ntfs-file-times-64-bit-math-using-only-dos-commands.aspx</link><pubDate>Sat, 23 Feb 2008 00:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7850971</guid><dc:creator>breazile</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/breazile/comments/7850971.aspx</comments><wfw:commentRss>http://blogs.msdn.com/breazile/commentrss.aspx?PostID=7850971</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=verdana,geneva color=#006600 size=3&gt;&lt;STRONG&gt;What are&amp;nbsp;File Times?&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva&gt;A &lt;EM&gt;File Time&amp;nbsp;&lt;/EM&gt;is a 64-bit value that represents the number of 100-nanosecond intervals that have elapsed since 12:00 A.M. January 1, 1601 Coordinated Universal Time (UTC).&amp;nbsp; I won't go into the details in this blog, but NTFS and Active Directory uses these, and you can find more information here: &lt;/FONT&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/ms724290.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms724290.aspx"&gt;&lt;FONT face=verdana,geneva&gt;http://msdn2.microsoft.com/en-us/library/ms724290.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=verdana,geneva&gt; This blog talks about how you can convert this 64 bit number into a human readable date&amp;nbsp;and time using only built-in DOS commands.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#006600 size=3&gt;&lt;STRONG&gt;The Challenge&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Convert a 64 bit NTTE number &lt;EM&gt;(&lt;STRONG&gt;NT&lt;/STRONG&gt; &lt;STRONG&gt;T&lt;/STRONG&gt;ime &lt;STRONG&gt;E&lt;/STRONG&gt;poch&lt;/EM&gt;, or a &lt;EM&gt;File Time&lt;/EM&gt; number) to a human readable date and time using only DOS commands, no other executables involved. Ok, I cheated a bit, I used regedit.exe to find the local time offset from UTC to show the local time as well. The UTC time calculation is pure DOS. Since the built in DOS math functions cannot handle 64 bit numbers, we have to calculate things manually.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva color=#006600 size=3&gt;&lt;STRONG&gt;Why? Dude, you have too much free time...&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva&gt;For fun, weeeee. Only a hard-core geek can appreciate this, and no one would want to do this in a real world application, but I used this exercise to reacquaint myself with DOS after a long absence from batch file scripting. I was in a training class and the instructor made it a challenge since he had not found a way to solve this problem. This scenario came up because some companies do not allow unapproved binaries to be executed in their environment, and w32tm was not available. My developer ego was at stake, since I had been a software architect and developer for more than 15 years. How hard could it be, and just how much can you really do using DOS commands?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva color=#006600 size=3&gt;&lt;STRONG&gt;How did you do it?&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva&gt;Since we can only use 32 bit signed numbers in DOS commands, we will need to break the number into a high order 32 bit number, and low order 32 bit number. We use the high order number to calculate the number of days since 1601, and then add the remainder to the low order number. From there we calculate days, hours, minutes, etc.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva&gt;We take into account leap years, and start calculating the year. Here are the rules for leap years:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if (year % 4 == 0) {&lt;BR&gt;&amp;nbsp;&amp;nbsp; if (year % 100 == 0) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (year % 400 == 0)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; We have a leap year&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Not a leap year&lt;BR&gt;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; We have a leap year&lt;BR&gt;}&lt;BR&gt;else&lt;BR&gt;&amp;nbsp;&amp;nbsp; Not a leap year&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva color=#ff6600 size=3&gt;&lt;STRONG&gt;&lt;FONT color=#006600&gt;Calling the Script&lt;/FONT&gt;&lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face=verdana,geneva&gt;&lt;BR&gt;Simply pass the NTTE number as a parameter, and hit enter. Here is an example:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;C:\&amp;gt;pntte 126036951652030000&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;UTC Time is 5/25/2000 2:26:05.2030000 AM&lt;BR&gt;Local Time is 5/24/2000 6:26:05.2030000 PM&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;We can use w32tm.exe to check our work:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;C:\&amp;gt;w32tm /ntte 126036951652030000&lt;BR&gt;145876 02:26:05.2030000 - 5/24/2000 6:26:05 PM (local time)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Badda bing, badda boom. Whadda know, the same result.&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=verdana,geneva&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva color=#ff6600 size=3&gt;&lt;STRONG&gt;&lt;FONT color=#006600&gt;The Code&lt;/FONT&gt;&lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT face=verdana,geneva&gt;&lt;BR&gt;Here is the source for the script. The code is commented, so I won't go through it here. If you find yourself modifying this script, please stop what you are doing, and go outside from time to time. You are spending way too much time in front of the computer :)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;::&lt;BR&gt;:: PNTTE.CMD - Jon Breazile - July 2006&lt;BR&gt;::&lt;BR&gt;:: Converts a Windows FILETIME number (NT Time Epoch) to UTC and local&lt;BR&gt;:: time using only DOS commands (at least in the case of UTC time)&lt;BR&gt;:: for cases where W32tm may not be available&lt;BR&gt;::&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;@echo off&lt;BR&gt;setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;title NTTE Time Conversion&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;::&amp;nbsp; ***&amp;nbsp; Check for missing parameters or request for help&lt;BR&gt;if "%1"=="" goto error&lt;BR&gt;if "%1"=="/?" goto usage&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;::echo.&lt;BR&gt;::echo Converting NTTE Time %1 to UTC and Local Time&lt;BR&gt;::echo.&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=verdana,geneva&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Calculate the length of the NTTE parameter&lt;BR&gt;call :StrLen %1&lt;BR&gt;set /a NTTE_LENGTH = %StrLen%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: NTTE conversion primer&lt;BR&gt;::&lt;BR&gt;:: Since we can only use 32 bit signed numbers in a shell script, we will need to&lt;BR&gt;:: break the number into a high order 32 bit number, and low order 32 bit number.&lt;BR&gt;:: We use the high order number to calculate the number of days since 1601, and&lt;BR&gt;:: then add the remainder to the low order number. From there we calculate days,&lt;BR&gt;:: hours, minutes, etc.&lt;BR&gt;::&lt;BR&gt;:: We take into account leap years, and start calculating the year. Here are the&lt;BR&gt;:: rules for leap years (I'm an old 'C' dev, with it):&lt;BR&gt;::&lt;BR&gt;:: if (year % 4 == 0) {&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp; if (year % 100 == 0) {&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (year % 400 == 0)&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; We have a leap year&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Not a leap year&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; We have a leap year&lt;BR&gt;:: }&lt;BR&gt;:: else&lt;BR&gt;::&amp;nbsp;&amp;nbsp;&amp;nbsp; Not a leap year&lt;BR&gt;::&lt;BR&gt;:: Now we know how to convert NTTE to UTC. Grab the GMT offset from the registry,&lt;BR&gt;:: and adjust the hours and recalculate to figure out UTC to local time.&lt;BR&gt;::&lt;BR&gt;:: Don't bother trying to convert NTTE to centuries, years, etc. It won't work, and&lt;BR&gt;:: you get math errors. The key is to convert it to days, and then convert the days&lt;BR&gt;:: to centuries, years, etc. Fair enough?&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Split the NTTE number into high and low order numbers. Add the high order part&lt;BR&gt;:: to the low order part if it is small enough.&lt;BR&gt;::&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: High order part of number of ticks in a day (actually 864,000,000,000)&lt;BR&gt;set TICK_DAY=864&lt;BR&gt;:: High order part of number of ticks in an hour (actually 36,000,000,000)&lt;BR&gt;set TICK_HOUR=36000000&lt;BR&gt;:: High order part of number of ticks in a minute (actually 600,000,000)&lt;BR&gt;set TICK_MINUTE=600000&lt;BR&gt;:: Number of ticks in a second&lt;BR&gt;set TICK_SECOND=10000000&lt;BR&gt;:: Number of ticks in a millisecond&lt;BR&gt;set TICK_MILLISEC=10000&lt;BR&gt;:: Number of days in a year&lt;BR&gt;set /a DAYS_IN_YEAR=365&lt;BR&gt;:: Number of days in 4 years&lt;BR&gt;set /a DAYS_IN_4YEARS=%DAYS_IN_YEAR% * 4 + 1&lt;BR&gt;:: Number of days in 100 years&lt;BR&gt;set /a DAYS_IN_100YEARS=%DAYS_IN_4YEARS% * 25 - 1&lt;BR&gt;:: Number of days in 400 years&lt;BR&gt;set /a DAYS_IN_400YEARS=%DAYS_IN_100YEARS% * 4 + 1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;set NTTE_TIME=%1&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Break the NTTE number into high order and low order parts&lt;BR&gt;if %NTTE_LENGTH% GTR 9&amp;nbsp; (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set NTTE_HIGH=%NTTE_TIME:~0,-9%&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set NTTE_LOW=%NTTE_TIME:~-9%&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a NTTE_HIGH=0&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set NTTE_LOW=%NTTE_TIME%&lt;BR&gt;)&lt;BR&gt;::echo high=%NTTE_HIGH%&lt;BR&gt;::echo low=%NTTE_LOW%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Calculate days, and store remainder for later processing&lt;BR&gt;if %NTTE_HIGH% GTR %TICK_DAY% (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a UTC_DAYS=%NTTE_HIGH% / %TICK_DAY%&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a REMAINDER=%NTTE_HIGH% - !UTC_DAYS! * %TICK_DAY%&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a UTC_DAYS=0&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a REMAINDER=%NTTE_HIGH%&lt;BR&gt;)&lt;BR&gt;::echo days=%UTC_DAYS%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Go ahead and add in some low order bits to the number&lt;BR&gt;set /a REMAINDER=%REMAINDER%%NTTE_LOW:~0,-3%&lt;BR&gt;::echo remainder=%REMAINDER%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Calculate hours, and store remainder for later processing&lt;BR&gt;if %REMAINDER% GTR %TICK_HOUR% (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a UTC_HOURS=%REMAINDER% / %TICK_HOUR%&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a REMAINDER=%REMAINDER% - !UTC_HOURS! * %TICK_HOUR%&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a UTC_HOURS=0&lt;BR&gt;)&lt;BR&gt;::echo hours=%UTC_HOURS%&lt;BR&gt;::echo remainder=%REMAINDER%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Calculate minutes, and store remainder for later processing&lt;BR&gt;if %REMAINDER% GTR %TICK_MINUTE% (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a UTC_MINUTES=%REMAINDER% / %TICK_MINUTE%&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a REMAINDER=%REMAINDER% - !UTC_MINUTES! * %TICK_MINUTE%&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a UTC_MINUTES=0&lt;BR&gt;)&lt;BR&gt;::echo minutes=%UTC_MINUTES%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: At this point, we need to add in the remaining low order bits&lt;BR&gt;set /a REMAINDER=%REMAINDER%%NTTE_LOW:~-3%&lt;BR&gt;::echo remainder=%REMAINDER%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Calculate seconds, and store remainder for later processing&lt;BR&gt;if %REMAINDER% GTR %TICK_SECOND% (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a UTC_SECONDS=%REMAINDER% / %TICK_SECOND%&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a REMAINDER=%REMAINDER% - !UTC_SECONDS! * %TICK_SECOND%&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a UTC_SECONDS=0&lt;BR&gt;)&lt;BR&gt;::echo seconds=%UTC_SECONDS%&lt;BR&gt;::echo remainder=%REMAINDER%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Calculate milliseconds, and store remainder for later processing&lt;BR&gt;if %REMAINDER% GTR %TICK_MILLISEC% (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a UTC_MILLISEC=%REMAINDER% / %TICK_MILLISEC%&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a REMAINDER=%REMAINDER% - !UTC_MILLISEC! * %TICK_MILLISEC%&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a UTC_MILLISEC=0&lt;BR&gt;)&lt;BR&gt;::echo milliseconds=%UTC_MILLISEC%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;set /a UTC_NANOSEC=%REMAINDER%&lt;BR&gt;:echo nanoseconds=%UTC_NANOSEC%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: OK, now we are ready to calculate the years from the days&lt;BR&gt;set /a QUAD_CENTURY=%UTC_DAYS% / %DAYS_IN_400YEARS%&lt;BR&gt;set /a REMAINDER=%UTC_DAYS% - %QUAD_CENTURY% * %DAYS_IN_400YEARS%&lt;BR&gt;::echo QUAD_CENTURY:%QUAD_CENTURY%&lt;BR&gt;::echo REMAINDER:%REMAINDER%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;set /a CENTURY=%REMAINDER% / %DAYS_IN_100YEARS%&lt;BR&gt;set /a REMAINDER=%REMAINDER% - %CENTURY% * %DAYS_IN_100YEARS%&lt;BR&gt;::echo CENTURY:%CENTURY%&lt;BR&gt;::echo REMAINDER:%REMAINDER%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;set /a QUAD_YEAR=%REMAINDER% / %DAYS_IN_4YEARS%&lt;BR&gt;set /a REMAINDER=%REMAINDER% - %QUAD_YEAR% * %DAYS_IN_4YEARS%&lt;BR&gt;::echo QUAD_YEAR:%QUAD_YEAR%&lt;BR&gt;::echo REMAINDER:%REMAINDER%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;set /a YEARS=%REMAINDER% / %DAYS_IN_YEAR%&lt;BR&gt;set /a REMAINDER=%REMAINDER% - %YEARS% * %DAYS_IN_YEAR%&lt;BR&gt;::echo YEARS:%YEARS%&lt;BR&gt;::echo REMAINDER:%REMAINDER%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;set /a UTC_YEAR=1601 + (%QUAD_CENTURY% * 400) + (%CENTURY% * 100) + (%QUAD_YEAR% * 4) + %YEARS%&lt;BR&gt;::echo %UTC_YEAR%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: See if the year is a leap year, so we can calculate the month and day&lt;BR&gt;set /a LEAP=%UTC_YEAR% %% 4&lt;BR&gt;if %LEAP% == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LEAP=%UTC_YEAR% %% 100&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %LEAP% == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LEAP=%UTC_YEAR% %% 400&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %LEAP% == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LEAP=1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LEAP=0&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LEAP=1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LEAP=0&lt;BR&gt;)&lt;BR&gt;::echo leap:%LEAP%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Now we are ready to figure out the month, REMAINDER contains the day&lt;BR&gt;:: in the current year. We add 1 to is because the day starts at 1 not 0&lt;BR&gt;set /a UTC_DAY=%REMAINDER% + 1&lt;BR&gt;set /a UTC_MONTH=1&lt;BR&gt;set /a LAST=0&lt;BR&gt;set /a TMP_DAY=0&lt;BR&gt;for %%a in (31,59,90,120,151,181,212,243,273,304,334) do (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %%a GTR 31 (set /a TMP_DAY=%%a + %LEAP%) else set /a TMP_DAY=%%a&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;&amp;nbsp;&amp;nbsp; if %UTC_DAY% LEQ !TMP_DAY! goto day_calc_exit&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;&amp;nbsp;&amp;nbsp; set /a UTC_MONTH=!UTC_MONTH! + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp; if %%a GTR 31 (set /a LAST=%%a + %LEAP%) else set /a LAST=%%a&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:day_calc_exit&lt;BR&gt;set /a UTC_DAY=%UTC_DAY%-%LAST%&lt;BR&gt;::echo month:%UTC_MONTH%&lt;BR&gt;::echo day:%UTC_DAY%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Extract the GMT offset (in minutes) from the registry, so we can calculate local time&lt;BR&gt;::&lt;BR&gt;call :get_gmt_offset&lt;BR&gt;set /a LOCAL_OFFSET=%get_gmt_offset%&lt;BR&gt;::echo local offset:%LOCAL_OFFSET%&lt;BR&gt;set /a LOCAL_DAY=%UTC_DAY%&lt;BR&gt;set /a LOCAL_MONTH=%UTC_MONTH%&lt;BR&gt;set /a LOCAL_YEAR=%UTC_YEAR%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Calculate local time offset in hours and minutes&lt;BR&gt;set /a OFFSET_HOURS=%LOCAL_OFFSET% / 60&lt;BR&gt;set /a OFFSET_MINUTES=%LOCAL_OFFSET% - %OFFSET_HOURS% * 60&lt;BR&gt;::echo offset %OFFSET_HOURS%:%OFFSET_MINUTES%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Adjust the minutes, and roll the hour back or forward if necessary&lt;BR&gt;set /a LOCAL_MINUTES=%UTC_MINUTES%+%OFFSET_MINUTES%&lt;BR&gt;if %LOCAL_MINUTES% LSS 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; set /a OFFSET_HOURS=%OFFSET_HOURS%-1&lt;BR&gt;&amp;nbsp;&amp;nbsp; set /a LOCAL_MINUTES=60+%LOCAL_MINUTES%&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %LOCAL_MINUTES% GTR 59 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a OFFSET_HOURS=%OFFSET_HOURS%+1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_MINUTES=%LOCAL_MINUTES%-60&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Adjust the hours, and roll the day back or forward if necessary&lt;BR&gt;set /a LOCAL_HOURS=%UTC_HOURS%+%OFFSET_HOURS%&lt;BR&gt;::echo local hrs:%LOCAL_HOURS%&lt;BR&gt;if %LOCAL_HOURS% LSS 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%LOCAL_DAY%-1&lt;BR&gt;&amp;nbsp;&amp;nbsp; set /a LOCAL_HOURS=24+%LOCAL_HOURS%&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %LOCAL_HOURS% GTR 23 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%LOCAL_DAY%+1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_HOURS=%LOCAL_HOURS%-23&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:: Do a final check on the day to see if we need to roll the month or year&lt;BR&gt;call :fix_day_month %LOCAL_DAY% %LOCAL_MONTH% %LEAP%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;echo.&lt;BR&gt;set BANNER="UTC Time is"&lt;BR&gt;call :print_utc_time %UTC_DAY% %UTC_MONTH% %UTC_YEAR% %UTC_HOURS% %UTC_MINUTES% %UTC_SECONDS% %UTC_MILLISEC% %UTC_NANOSEC% %BANNER%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;set BANNER="Local Time is"&lt;BR&gt;call :print_utc_time %LOCAL_DAY% %LOCAL_MONTH% %LOCAL_YEAR% %LOCAL_HOURS% %LOCAL_MINUTES% %UTC_SECONDS% %UTC_MILLISEC% %UTC_NANOSEC% %BANNER%&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;goto end&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;::&amp;nbsp; ********************************************************************************&lt;BR&gt;::&amp;nbsp; *** &lt;BR&gt;::&amp;nbsp; *** print_utc_time - Print the specified time in a pretty format &lt;BR&gt;::&amp;nbsp; ***&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; interested in ActiveTimeBias which is the offset (in minutes) &lt;BR&gt;;:&amp;nbsp; ***&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from UTC time.&lt;BR&gt;::&amp;nbsp; ***&lt;BR&gt;::&amp;nbsp; *** Parameters:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %1 - Day, %2 - Month, %3 - Year, %4 - Hour, %5 - Min, &lt;BR&gt;::&amp;nbsp; ***&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %6 - Sec, %7 - millisec, %8 - nanosec,&lt;BR&gt;::&amp;nbsp; ***&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %9 - Text to print before the time (use quotes if spaces in parameter)&lt;BR&gt;::&amp;nbsp; *** Return:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None.&lt;BR&gt;::&amp;nbsp; ***&lt;BR&gt;::&amp;nbsp; ********************************************************************************&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:print_utc_time&lt;BR&gt;setlocal&lt;BR&gt;set DAY=%1&lt;BR&gt;set MONTH=%2&lt;BR&gt;set YEAR=%3&lt;BR&gt;set HOURS=%4&lt;BR&gt;set MINUTES=%5&lt;BR&gt;set SECONDS=%6&lt;BR&gt;set MILLISEC=%7&lt;BR&gt;set NANOSEC=%8&lt;BR&gt;if %HOURS% GTR 12 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a SHOW_HOURS=%HOURS%-12&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set AMPM=PM&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a SHOW_HOURS=%HOURS%&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set AMPM=AM&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %MINUTES% LSS 10 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set SHOW_MIN=0%MINUTES%&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set SHOW_MIN=%MINUTES%&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %SECONDS% LSS 10 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set SHOW_SEC=0%SECONDS%&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set SHOW_SEC=%SECONDS%&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %MILLISEC% LSS 10 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set SHOW_MILLISEC=00%MILLISEC%&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %MILLISEC% LSS 100 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set SHOW_MILLISEC=0%MILLISEC%&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set SHOW_MILLISEC=%MILLISEC%&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %NANOSEC% LSS 10 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set SHOW_NANOSEC=000%NANOSEC%&lt;BR&gt;) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %NANOSEC% LSS 100 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set SHOW_NANOSEC=00%NANOSEC%&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %NANOSEC% LSS 1000 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set SHOW_NANOSEC=0%NANOSEC%&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set SHOW_NANOSEC=%NANOSEC%&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;echo %~9 %MONTH%/%DAY%/%YEAR% %SHOW_HOURS%:%SHOW_MIN%:%SHOW_SEC%.%SHOW_MILLISEC%%SHOW_NANOSEC% %AMPM%&lt;BR&gt;endlocal&lt;BR&gt;goto :EOF&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;::&amp;nbsp; ********************************************************************************&lt;BR&gt;::&amp;nbsp; *** &lt;BR&gt;::&amp;nbsp; *** get_gmt_offset - Extract the local time offset from the registry. We are &lt;BR&gt;::&amp;nbsp; ***&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; interested in ActiveTimeBias which is the offset (in minutes) &lt;BR&gt;;:&amp;nbsp; ***&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from UTC time.&lt;BR&gt;::&amp;nbsp; ***&lt;BR&gt;::&amp;nbsp; *** Parameters:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&lt;BR&gt;::&amp;nbsp; *** Return:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The adjusted value of ActiveTimeBias.&lt;BR&gt;::&amp;nbsp; ***&lt;BR&gt;::&amp;nbsp; ********************************************************************************&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:get_gmt_offset&lt;BR&gt;setlocal&lt;BR&gt;set junk=0x123&lt;BR&gt;regedit /e pntte.tmp "HKEY_LOCAL_MACHINE\system\currentcontrolset\control\timezoneinformation"&lt;BR&gt;For /F "skip=3 tokens=1-3* delims=:=" %%a in ('type pntte.tmp') do (&lt;BR&gt;&amp;nbsp;::&amp;nbsp; *** Look for ActiveTimeBias which gives us the offset in seconds, make a valid hex number&lt;BR&gt;&amp;nbsp;if /i %%a=="ActiveTimeBias" set junk=0x%%c&lt;BR&gt;)&lt;BR&gt;:: Convert hex bias to decimal bias, and fix sign (offset FROM GMT instead of offset TO GMT)&lt;BR&gt;if exist pntte.tmp del pntte.tmp&lt;BR&gt;set /a get_gmt_offset=0-!junk!&lt;BR&gt;endlocal &amp;amp; set get_gmt_offset=%get_gmt_offset%&lt;BR&gt;goto :EOF&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;::&amp;nbsp; ********************************************************************************&lt;BR&gt;::&amp;nbsp; *** &lt;BR&gt;::&amp;nbsp; *** StrLen -&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Calculate the number of characters in a variable&lt;BR&gt;::&amp;nbsp; ***&lt;BR&gt;::&amp;nbsp; *** Parameters:&amp;nbsp;&amp;nbsp; %1 contains the variable which you want the length of&lt;BR&gt;::&amp;nbsp; *** Return:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Returns the length of the string.&lt;BR&gt;::&amp;nbsp; ***&lt;BR&gt;::&amp;nbsp; ********************************************************************************&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:StrLen&lt;BR&gt;setlocal &amp;amp; set TmpCnt=%*&lt;BR&gt;if not defined TmpCnt (&lt;BR&gt;&amp;nbsp; set StrLen=0&lt;BR&gt;) else ( &lt;BR&gt;:Lenloop&lt;BR&gt;&amp;nbsp; set TmpCnt=%TmpCnt:~1%&lt;BR&gt;&amp;nbsp; set /a StrLen +=1&lt;BR&gt;&amp;nbsp; if defined TmpCnt goto Lenloop&lt;BR&gt;) &lt;BR&gt;endlocal &amp;amp; set StrLen=%StrLen%&lt;BR&gt;goto :EOF&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;::&amp;nbsp; ********************************************************************************&lt;BR&gt;::&amp;nbsp; *** &lt;BR&gt;::&amp;nbsp; *** fix_day_month - Look at the day and month after rolling time, and fix it.&lt;BR&gt;::&amp;nbsp; ***&lt;BR&gt;::&amp;nbsp; *** Parameters:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %1 - day, %2 - month, %3 - leap year flag (1 = leap year)&lt;BR&gt;::&amp;nbsp; *** Return:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Adjustment to year if necessary.&lt;BR&gt;::&amp;nbsp; ***&lt;BR&gt;::&amp;nbsp; ********************************************************************************&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:fix_day_month&lt;BR&gt;set fix_day_month=0&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %2 == 1 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=12&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a fix_day_month=-1 &lt;BR&gt;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 31 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; goto fix_day_month_exit&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %2 == 2 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %3 == 1 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 29 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 29&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 28 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 28&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; goto fix_day_month_exit&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %2 == 3 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %3 == 1 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=29&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=2&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 31 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=28&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=2&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 31 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; goto fix_day_month_exit&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %2 == 4 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=3&lt;BR&gt;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 30 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 30&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; goto fix_day_month_exit&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %2 == 5 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=30&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=4&lt;BR&gt;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 31 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; goto fix_day_month_exit&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %2 == 6 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=5&lt;BR&gt;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 30 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 30&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; goto fix_day_month_exit&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %2 == 7 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=30&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=6&lt;BR&gt;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 31 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; goto fix_day_month_exit&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %2 == 8 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=7&lt;BR&gt;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 31 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; goto fix_day_month_exit&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %2 == 9 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=8&lt;BR&gt;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 30 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 30&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; goto fix_day_month_exit&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %2 == 10 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=30&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=9&lt;BR&gt;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 31 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; goto fix_day_month_exit&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %2 == 11 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=10&lt;BR&gt;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 30 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 30&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=%LOCAL_mONTH% + 1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; goto fix_day_month_exit&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;if %2 == 12 (&lt;BR&gt;&amp;nbsp;&amp;nbsp; if %1 == 0 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=30&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=11&lt;BR&gt;&amp;nbsp;&amp;nbsp; ) else (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if %1 GTR 31 (&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_DAY=%1 - 31&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a LOCAL_mONTH=1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set /a fix_day_month=1 &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;&amp;nbsp;&amp;nbsp; )&lt;BR&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;:fix_day_month_exit&lt;BR&gt;set /a LOCAL_YEAR=%LOCAL_YEAR% + %fix_day_month%&lt;BR&gt;::set fix_day_month=%fix_day_month%&lt;BR&gt;goto :EOF&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;::&amp;nbsp; *** Error Jmp, no parameters, or bad parameter&lt;BR&gt;:error&lt;BR&gt;echo.&lt;BR&gt;echo ERROR: no NTTE parameter was defined (try %0 /?)&lt;BR&gt;echo.&lt;BR&gt;goto end&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;::&amp;nbsp; *** Print usage&lt;BR&gt;:usage&lt;BR&gt;echo.&lt;BR&gt;echo %0 FILETIME&lt;BR&gt;echo.&lt;BR&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Where FILETIME is a 64 bit number representing a Windows FILETIME&lt;BR&gt;echo.&lt;BR&gt;echo Example:&lt;BR&gt;echo.&lt;BR&gt;echo&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %0 126036951652030000&lt;BR&gt;echo.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;::&amp;nbsp; *** That's all folks, make sure your seat backs are up, and tray tables are put away...&lt;BR&gt;:end&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier" color=#3300ff&gt;title Command Prompt&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#3300ff&gt;&lt;FONT face="courier new,courier"&gt;endlocal&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=verdana,geneva&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7850971" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/breazile/archive/tags/Geek+Fun/default.aspx">Geek Fun</category></item></channel></rss>