<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7592335279592023378</id><updated>2012-02-08T11:12:16.684+08:00</updated><category term='C#'/><category term='FoxPro'/><category term='MySQL'/><category term='Subversion'/><category term='Database'/><category term='Web'/><category term='SQL Server'/><title type='text'>simpcode</title><subtitle type='html'>Code simple...

A blog to share my experience as a software developer, as well as for my own reference. Any feedback or advice is welcome.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-4135050539611441025</id><published>2011-12-10T08:43:00.001+08:00</published><updated>2011-12-10T08:43:25.454+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>MySQL Backup Batch Script With 7Zip And Email Alert</title><content type='html'>This is yet another MySQL Backup batch script with the following features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dumps each database into separate folder and script.&lt;li&gt;Allows to set database(s) excluded from backup.&lt;li&gt;Each script is compressed (7zip) and encrypted with a password.&lt;li&gt;Keeps the last n copies of backups.&lt;li&gt;Email alert on backup errors.&lt;/ul&gt;&lt;br /&gt;It requires the following tools:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dev.mysql.com/downloads/"&gt;MySQL&lt;/a&gt; bin utilities - mysql.exe and mysqldump.exe.&lt;li&gt;&lt;a href="http://www.7-zip.org/"&gt;7zip&lt;/a&gt; compression tool.&lt;li&gt;&lt;a href="http://www.blat.net/"&gt;blat&lt;/a&gt; emailer tool.&lt;/ul&gt;&lt;b&gt;Note:&lt;/b&gt; It can backup any networked MySQL databases (either Windows or Linux platforms), as long as the MySQL bin utilities can access them.&lt;br /&gt;&lt;br /&gt;This script is easy to configure and highly customizable. You only need to change the values in the "Begin/End Settings" sections. Please refer the script header remarks for more information and other options.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How to use:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1. Create a batch file named as "&lt;b&gt;weizh-mysql-backup.bat&lt;/b&gt;" with the following contents:&lt;br /&gt;&lt;pre style='color:#000020;background:#f6f8ff;'&gt;&lt;span style='color:#308080; '&gt;@&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO OFF&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;=====================================================================================&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Copyright 2011 Weizh Chang&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;This program is free software: you can redistribute it and/or modify&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;it under the terms of the GNU General Public License as published by&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;the Free Software Foundation, either version 3 of the License, or&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;(at your option) any later version.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;This program is distributed in the hope that it will be useful,&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;GNU General Public License for more details.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;You should have received a copy of the GNU General Public License&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;=====================================================================================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;=====================================================================================&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Program    : Weizh MySQL Backup Batch Script&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;File       : weizh-mysql-backup.bat&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Version    : 1.0.0.0&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;URL        : simpcode.blogspot.com&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Description:&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Please change the settings in the Begin/End Settings sections below.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;This script requires:&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- MySQL bin utilities - mysql.exe and mysqldump.exe.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- 7zip compression tool (www.7-zip.org).&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- blat emailer tool (www.blat.net).&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Features:&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- Dumps each database into separate folder and script.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- Allows to set database(s) excluded from backup.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- Each script is compressed (7zip) and encrypted with a password.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- Keeps the last n copies of backups.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- Email alert on backup errors.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;=====================================================================================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;@&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO ON&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;================ Begin MySQL Settings ====================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; mySQLBinDir&lt;span style='color:#308080; '&gt;=&lt;/span&gt;C&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;\&lt;/span&gt;Program &lt;span style='color:#200080; font-weight:bold; '&gt;Files&lt;/span&gt;&lt;span style='color:#308080; '&gt;\&lt;/span&gt;MySQL&lt;span style='color:#308080; '&gt;\&lt;/span&gt;MySQL Server &lt;span style='color:#008c00; '&gt;5&lt;/span&gt;.&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#308080; '&gt;\&lt;/span&gt;bin&lt;span style='color:#308080; '&gt;\&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; host&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;192&lt;/span&gt;.&lt;span style='color:#008c00; '&gt;168&lt;/span&gt;.&lt;span style='color:#008c00; '&gt;100&lt;/span&gt;.&lt;span style='color:#008c00; '&gt;2&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; uid&lt;span style='color:#308080; '&gt;=&lt;/span&gt;admin&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; pwd&lt;span style='color:#308080; '&gt;=&lt;/span&gt;adminPassw0rd&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; port&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;3306&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; backupDir&lt;span style='color:#308080; '&gt;=&lt;/span&gt;D&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;\&lt;/span&gt;MySQL_Backup&lt;span style='color:#308080; '&gt;\&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; backupPrefix&lt;span style='color:#308080; '&gt;=&lt;/span&gt;MySQL_3306_&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; backupCopy&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set mysqldump switch (optional)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sqldumpSwitch&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;single&lt;span style='color:#308080; '&gt;-&lt;/span&gt;transaction&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set database excluded from backup (comma separated, without quotes and spaces)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; excludeDb&lt;span style='color:#308080; '&gt;=&lt;/span&gt;information_schema&lt;span style='color:#308080; '&gt;,&lt;/span&gt;performance_schema&lt;span style='color:#308080; '&gt;,&lt;/span&gt;test&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set the 7zip exe directory and password&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; zipDir&lt;span style='color:#308080; '&gt;=&lt;/span&gt;C&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;\&lt;/span&gt;Program &lt;span style='color:#200080; font-weight:bold; '&gt;Files&lt;/span&gt;&lt;span style='color:#308080; '&gt;\&lt;/span&gt;&lt;span style='color:#008c00; '&gt;7&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;Zip&lt;span style='color:#308080; '&gt;\&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; zipPwd&lt;span style='color:#308080; '&gt;=&lt;/span&gt;yourZipPassw0rd&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;================ End MySQL Settings ======================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;================ Begin Email Settings ====================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set all values to empty if not using email alert&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; emailServer&lt;span style='color:#308080; '&gt;=&lt;/span&gt;mail.example.com&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; emailPort&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;25&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; emailUid&lt;span style='color:#308080; '&gt;=&lt;/span&gt;admin&lt;span style='color:#308080; '&gt;@&lt;/span&gt;example.com&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; emailPwd&lt;span style='color:#308080; '&gt;=&lt;/span&gt;adminPassw0rd&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendFrom&lt;span style='color:#308080; '&gt;=&lt;/span&gt;admin&lt;span style='color:#308080; '&gt;@&lt;/span&gt;example.com&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendTry&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;5&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; subject&lt;span style='color:#308080; '&gt;=&lt;/span&gt;MySQL &lt;span style='color:#200080; font-weight:bold; '&gt;Backup&lt;/span&gt; Alert&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set receiver email (comma separated, without quotes and spaces)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendTo&lt;span style='color:#308080; '&gt;=&lt;/span&gt;alex&lt;span style='color:#308080; '&gt;@&lt;/span&gt;example.com&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set the blat exe directory&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; emailDir&lt;span style='color:#308080; '&gt;=&lt;/span&gt;C&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;\&lt;/span&gt;blat&lt;span style='color:#308080; '&gt;\&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;================ End Email Settings ======================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;================ Begin Backup ============================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Performing &lt;span style='color:#200080; font-weight:bold; '&gt;backup&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set date and time&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;For&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=2-4 delims=/ "&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;a &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;'&lt;span style='color:#200080; font-weight:bold; '&gt;DATE&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;t'&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; mydate&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;c&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;a&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;b&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; mytime&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%TIME:~0,8%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; mytime&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%mytime: =0%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set command variable&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; doShowDb&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%mySQLBinDir%mysql"&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;B &lt;span style='color:#308080; '&gt;-&lt;/span&gt;N &lt;span style='color:#308080; '&gt;-&lt;/span&gt;e &lt;span style='color:#1060b6; '&gt;"SHOW DATABASES"&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;h &lt;span style='color:#007d45; '&gt;%host%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;u &lt;span style='color:#007d45; '&gt;%uid%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;p&lt;span style='color:#007d45; '&gt;%pwd%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;P &lt;span style='color:#007d45; '&gt;%port%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; doDump&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%mySQLBinDir%mysqldump"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%sqldumpSwitch%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;h &lt;span style='color:#007d45; '&gt;%host%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;u &lt;span style='color:#007d45; '&gt;%uid%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;p&lt;span style='color:#007d45; '&gt;%pwd%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;P &lt;span style='color:#007d45; '&gt;%port%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; doZip&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%zipDir%7z.exe"&lt;/span&gt; a &lt;span style='color:#308080; '&gt;-&lt;/span&gt;t7z &lt;span style='color:#308080; '&gt;-&lt;/span&gt;mx9 &lt;span style='color:#308080; '&gt;-&lt;/span&gt;mhe &lt;span style='color:#308080; '&gt;-&lt;/span&gt;p&lt;span style='color:#007d45; '&gt;%zipPwd%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; doZipTest&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%zipDir%7z.exe"&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;r &lt;span style='color:#308080; '&gt;-&lt;/span&gt;p&lt;span style='color:#007d45; '&gt;%zipPwd%&lt;/span&gt; t&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Loop and backup each database&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SETLOCAL&lt;/span&gt; ENABLEDELAYEDEXPANSION&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; errorDbTemp&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Test the connection&lt;/span&gt;&lt;br /&gt;!doShowDb!&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; !&lt;span style='color:#200080; font-weight:bold; '&gt;ERRORLEVEL&lt;/span&gt;! &lt;span style='color:#200080; font-weight:bold; '&gt;NEQ&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; errorDbTemp&lt;span style='color:#308080; '&gt;=&lt;/span&gt;MySQL Connection Error&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;GOTO &lt;/span&gt;&lt;span style='color:#e34adc; '&gt;EndLoop&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;FOR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=*"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;G &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;'&lt;span style='color:#1060b6; '&gt;"!doShowDb!"&lt;/span&gt;'&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; exclude&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; errorFound&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%excludeDb%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;FOR&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;S &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%excludeDb%&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;I &lt;span style='color:#1060b6; '&gt;"%%S"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%%G"&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; exclude&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; !exclude!&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set backup directory and file for this db&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;EXIST&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%backupDir%%%G"&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;MD&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%backupDir%%%G"&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;For&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=2-4 delims=/ "&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;a &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;'&lt;span style='color:#200080; font-weight:bold; '&gt;DATE&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;t'&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; backupDate&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;c&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;a&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;b&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; backupTime&lt;span style='color:#308080; '&gt;=&lt;/span&gt;!&lt;span style='color:#200080; font-weight:bold; '&gt;TIME&lt;/span&gt;&lt;span style='color:#308080; '&gt;:&lt;/span&gt;~&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt;&lt;span style='color:#008c00; '&gt;8&lt;/span&gt;!&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; backupTime&lt;span style='color:#308080; '&gt;=&lt;/span&gt;!backupTime&lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;!&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; backupFile&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%backupDir%&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;G&lt;span style='color:#308080; '&gt;\&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%backupPrefix%&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;G_!backupDate&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;!_!backupTime&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Perform MySQLDump&lt;/span&gt;&lt;br /&gt;        !doDump! &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;databases &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;G &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"!backupFile!.sql"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; !&lt;span style='color:#200080; font-weight:bold; '&gt;ERRORLEVEL&lt;/span&gt;! &lt;span style='color:#200080; font-weight:bold; '&gt;NEQ&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; errorFound&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;EXIST&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"!backupFile!.sql"&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; errorFound&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#308080; '&gt;)&lt;/span&gt; ELSE &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Zip then delete the sql file&lt;/span&gt;&lt;br /&gt;            !doZip! &lt;span style='color:#1060b6; '&gt;"!backupFile!.7z"&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"!backupFile!.sql"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; !&lt;span style='color:#200080; font-weight:bold; '&gt;ERRORLEVEL&lt;/span&gt;! &lt;span style='color:#200080; font-weight:bold; '&gt;NEQ&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; errorFound&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Test the zip integrity&lt;/span&gt;&lt;br /&gt;            !doZipTest! &lt;span style='color:#1060b6; '&gt;"!backupFile!.7z"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; !&lt;span style='color:#200080; font-weight:bold; '&gt;ERRORLEVEL&lt;/span&gt;! &lt;span style='color:#200080; font-weight:bold; '&gt;NEQ&lt;/span&gt; &lt;span style='color:#008c00; '&gt;0&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; errorFound&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;DEL&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;Q &lt;span style='color:#1060b6; '&gt;"!backupFile!.sql"&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; !errorFound!&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== If errors, clean up and append the db name to a temp variable&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;EXIST&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"!backupFile!.*"&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DEL&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;Q &lt;span style='color:#1060b6; '&gt;"!backupFile!.*"&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; errorDbTemp&lt;span style='color:#308080; '&gt;=&lt;/span&gt;!errorDbTemp!&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;G&lt;span style='color:#308080; '&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#308080; '&gt;)&lt;/span&gt; ELSE &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Delete old zip copies, sort by file name descending&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;EXIST&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%backupDir%%%G\%backupPrefix%%%G_*.7z"&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; zipCount&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;FOR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=*"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;U &lt;span style='color:#200080; font-weight:bold; '&gt;in&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;'&lt;span style='color:#200080; font-weight:bold; '&gt;DIR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;A&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;D&lt;span style='color:#308080; '&gt;-&lt;/span&gt;H &lt;span style='color:#308080; '&gt;/&lt;/span&gt;O&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;N &lt;span style='color:#308080; '&gt;/&lt;/span&gt;B &lt;span style='color:#1060b6; '&gt;"%backupDir%%%G\%backupPrefix%%%G_*.7z"&lt;/span&gt;'&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;                    &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;A zipCount+&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;br /&gt;                    &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; !zipCount! &lt;span style='color:#200080; font-weight:bold; '&gt;GTR&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%backupCopy%&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DEL&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;Q &lt;span style='color:#1060b6; '&gt;"%backupDir%%%G\%%U"&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#e34adc; '&gt;:EndLoop&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ENDLOCAL&lt;/span&gt; &lt;span style='color:#308080; '&gt;&amp;amp;&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; errorDb&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%errorDbTemp%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%errorDb%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;GOTO &lt;/span&gt;&lt;span style='color:#e34adc; '&gt;SendError&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;GOTO &lt;/span&gt;&lt;span style='color:#e34adc; '&gt;Finish&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;================ End Backup ==============================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;================ Begin Send Error Email Alert ============&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#e34adc; '&gt;:SendError&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%emailServer%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;Backup&lt;/span&gt; error &lt;span style='color:#200080; font-weight:bold; '&gt;on&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%errorDb%&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;GOTO &lt;/span&gt;&lt;span style='color:#e34adc; '&gt;Finish&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Sending error email alert&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set sendTo with surrounding quotes&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendTo&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%sendTo%"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set email temp file&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; tmpErrorFile&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%~dp0mysql_backup_error-%RANDOM%.tmp"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Dear Database Admin&lt;span style='color:#308080; '&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; There were errors while performing the MySQL &lt;span style='color:#200080; font-weight:bold; '&gt;Backup&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;on&lt;/span&gt; the following databases&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;Date&lt;/span&gt;&lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%mydate%&lt;/span&gt;      &lt;span style='color:#200080; font-weight:bold; '&gt;Time&lt;/span&gt;&lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%mytime%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Host&lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%host%&lt;/span&gt;      Port&lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%port%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%errorDb%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Regards&lt;span style='color:#308080; '&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; MySQL Server Admin&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%tmpErrorFile%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Send error email alert&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#1060b6; '&gt;"%emailDir%blat.exe"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%tmpErrorFile%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;server &lt;span style='color:#007d45; '&gt;%emailServer%&lt;/span&gt;&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%emailPort%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;f &lt;span style='color:#007d45; '&gt;%emailUid%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;u &lt;span style='color:#007d45; '&gt;%emailUid%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;pw &lt;span style='color:#007d45; '&gt;%emailPwd%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;from &lt;span style='color:#007d45; '&gt;%sendFrom%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;to &lt;span style='color:#007d45; '&gt;%sendTo%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;subject &lt;span style='color:#1060b6; '&gt;"%subject%"&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;try &lt;span style='color:#007d45; '&gt;%sendTry%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Cleanup&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;EXIST&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%tmpErrorFile%&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DEL&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;Q &lt;span style='color:#007d45; '&gt;%tmpErrorFile%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;================ End Send Error Email Alert ==============&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#e34adc; '&gt;:Finish&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;Backup&lt;/span&gt; process completed&lt;br /&gt;&lt;/pre&gt;2. Set values in the &lt;b&gt;Begin/End MySQL Settings&lt;/b&gt; and &lt;b&gt;Begin/End Email Settings&lt;/b&gt; sections. Put this file into any folder you like.&lt;br /&gt;&lt;br /&gt;3. You may use the &lt;b&gt;Windows Task Scheduler&lt;/b&gt; to run this script routinely or at anytime you prefer.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-4135050539611441025?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/4135050539611441025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2011/12/mysql-backup-batch-script-with-7zip-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/4135050539611441025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/4135050539611441025'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2011/12/mysql-backup-batch-script-with-7zip-and.html' title='MySQL Backup Batch Script With 7Zip And Email Alert'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-1091121123782747480</id><published>2011-12-02T11:17:00.000+08:00</published><updated>2011-12-02T11:17:30.310+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>SQL Server 2008 R2 Express Installation And Setup</title><content type='html'>This post provides a basic guideline about installing &lt;b&gt;SQL Server 2008 R2 Express&lt;/b&gt; together with the &lt;b&gt;SQL Server Management Studio&lt;/b&gt;.&lt;br&gt;&lt;br&gt;1. If you do not have &lt;b&gt;Windows Power Shell&lt;/b&gt; installed, please install it from &lt;a href="http://support.microsoft.com/kb/968929"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;ul&gt;&lt;li&gt;On that page, find the &lt;b&gt;Download information&lt;/b&gt; &gt; &lt;b&gt;Windows Management Framework Core (WinRM 2.0 and Windows PowerShell 2.0)&lt;/b&gt;, then select &lt;b&gt;Download the Windows Management Framework Core for Windows XXX package now&lt;/b&gt;, whereby XXX is your Windows edition (thanks to &lt;a href="http://blogs.technet.com/b/heyscriptingguy/archive/2011/01/28/install-powershell-on-windows-xp-and-copying-files.aspx"&gt;this site&lt;/a&gt; for the link).&lt;li&gt;&lt;i&gt;&lt;b&gt;Note&lt;/b&gt;: Power Shell is only needed by SQL Server Management Studio. You may skip this step if you do not want to install the studio.&lt;/i&gt;&lt;/ul&gt;&lt;br&gt;2. Download and install "&lt;b&gt;SQL Server 2008 R2 Express With Tools&lt;/b&gt;" from &lt;a href="http://www.microsoft.com/sqlserver/en/us/editions/express.aspx"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Note:&lt;/b&gt; To do a clean install, you may first want to remove any existing SQL Server 2008 (or R2) database and utilities from the Control Panel &gt; Add/Remove Programs.&lt;/i&gt;&lt;/ul&gt;&lt;br&gt;3. When prompted, select "&lt;b&gt;New installation or add features to an existing installation&lt;/b&gt;". Follow the instructions.&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Instance Configuration&lt;/b&gt; &gt; &lt;b&gt;Named instance&lt;/b&gt;: You may want to rename it to "&lt;b&gt;SQLEXPRESS2008R2&lt;/b&gt;" or just use the default.&lt;li&gt;&lt;b&gt;Server Configuration&lt;/b&gt; &gt; &lt;b&gt;Service Accounts&lt;/b&gt;: Enter any existing Windows account name and password which has sufficient rights (e.g. the admin account).&lt;br&gt;&lt;li&gt;&lt;b&gt;Database Engine Configuration&lt;/b&gt; &gt; &lt;b&gt;Authentication mode&lt;/b&gt;: Select "&lt;b&gt;Windows authentication mode&lt;/b&gt;" (this can be changed later).&lt;li&gt;Restart the computer if needed.&lt;/ul&gt;&lt;br&gt;4. Go to Start &gt; Microsoft SQL Server 2008 R2 &gt; Configuration Tools &gt; &lt;b&gt;SQL Server Configuration Manager&lt;/b&gt;:&lt;br&gt;&lt;ul&gt;&lt;li&gt;SQL Server Services &gt; SQL Server: Make sure it is running.&lt;li&gt;SQL Server Network Configuration &gt; Protocols for xxxx: You can enable and set the remote network connection settings here.&lt;/ul&gt;&lt;br&gt;5. Go to Start &gt; Microsoft SQL Server 2008 R2 &gt; &lt;b&gt;SQL Server Management Studio&lt;/b&gt; &gt; &lt;b&gt;Connect to server&lt;/b&gt;:&lt;br&gt;&lt;ul&gt;&lt;li&gt;Server name: &lt;i&gt;serverName&lt;/i&gt;\&lt;i&gt;instanceName&lt;/i&gt; (e.g. myserver\SQLEXPRESS2008R2)&lt;li&gt;Authentication: Windows Authentication&lt;/ul&gt;&lt;br&gt;If everything is correct, you should be able to connect to the database now.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Setup Security and Authentication using SQL Server Management Studio&lt;/b&gt;&lt;br&gt;&lt;br&gt;1. Enable "&lt;b&gt;SQL Server Authentication Mode&lt;/b&gt;":&lt;br&gt;&lt;ul&gt;&lt;li&gt;In Object Explorer &gt; Right-click the server to Properties &gt; Security &gt; Server authentication: Select "SQL Server and Windows Authentication mode".&lt;li&gt;Once set, you may need to restart the service from "SQL Server Configuration Manager".&lt;/ul&gt;&lt;br&gt;2. Enable "&lt;b&gt;sa&lt;/b&gt;" login:&lt;br&gt;&lt;ul&gt;&lt;li&gt;By default the "sa" account is disabled. To enable:&lt;br&gt;In Object Explorer &gt; Security &gt; Logins &gt; sa &gt; Right-click to Properties:    &lt;ul&gt;    &lt;li&gt;General: Set the password.    &lt;li&gt;Status &gt; Login: Select "Enabled".    &lt;/ul&gt;&lt;/ul&gt;&lt;br&gt;3. Add new SQL Server authentication:&lt;br&gt;&lt;ul&gt;&lt;li&gt;In Object Explorer &gt; Security &gt; Logins &gt; Right-click to New Login &gt; Select "SQL Server authentication": From here, you can set the login name, password, default database and other information.&lt;/ul&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Additional Resources:&lt;/b&gt;&lt;br&gt;&lt;a href="http://www.mssqltips.com/sqlservertip/2024/introduction-to-sql-server-express-2008-r2/"&gt;Introduction to SQL Server Express 2008 R2&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-1091121123782747480?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/1091121123782747480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2011/12/sql-server-2008-r2-express-installation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/1091121123782747480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/1091121123782747480'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2011/12/sql-server-2008-r2-express-installation.html' title='SQL Server 2008 R2 Express Installation And Setup'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-4208401016666268243</id><published>2011-11-13T12:18:00.000+08:00</published><updated>2011-11-13T12:20:03.909+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Assemblies Merging With Post-build Event</title><content type='html'>&lt;b&gt;ILMerge&lt;/b&gt; is a useful utility to merge multiple .NET assemblies into a single assembly. By using the "Post-build" event command line, we can automate the merging process when building our projects.&lt;br&gt;&lt;br&gt;&lt;i&gt;There is a better method by using MSBuild. Please refer Assemblies Merging With ILMerge and MSBuild (TODO).&lt;/i&gt;&lt;br&gt;&lt;br&gt;For my projects, I use a &lt;b&gt;ILMergeHelper&lt;/b&gt; batch file to run the ILMerge process. By using this script, all files inside the bin output are copied over to a sub folder "&lt;b&gt;ReleaseMerged&lt;/b&gt;". All merging process are done within this sub folder, as such, nothing in the bin output folder will be affected.&lt;br&gt;&lt;br&gt;&lt;b&gt;Syntax:&lt;/b&gt;&lt;br&gt;&lt;pre style='color:#000020;background:#f6f8ff;'&gt;ILMergeHelper.bat &lt;span style='color:#007d45; '&gt;&amp;lt;targetDir&gt;&lt;/span&gt; &lt;span style='color:#007d45; '&gt;&amp;lt;targetFileName&gt;&lt;/span&gt; &lt;span style='color:#007d45; '&gt;&amp;lt;solutionName&gt;&lt;/span&gt; &lt;span style='color:#007d45; '&gt;&amp;lt;inputAssemblies&gt;&lt;/span&gt; &lt;span style='color:#308080; '&gt;[&lt;/span&gt;cleanAssemblies&lt;span style='color:#308080; '&gt;]&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;Arguments:&lt;/b&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;targetDir &lt;/i&gt;- The merged output directory.&lt;li&gt;&lt;i&gt;targetFileName &lt;/i&gt;- The merged output file name.&lt;li&gt;&lt;i&gt;solutionName &lt;/i&gt;- The project solution name.&lt;li&gt;&lt;i&gt;inputAssemblies &lt;/i&gt;- The assemblies to be merged. Must enclose with double-quotes, separate each assembly name with a space within the quotes. Supports wildcards.&lt;li&gt;&lt;i&gt;cleanAssemblies &lt;/i&gt;- Optional. The files to be deleted after the merging completed. If not set, will be same as inputAssemblies. Must enclose with double-quotes, separate each assembly name with a space within the quotes. Supports wildcards.&lt;/ul&gt;&lt;i&gt;&lt;b&gt;Note:&lt;/b&gt; Please see example below.&lt;/i&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Setup ILMerge and ILMergeHelper (only set once):&lt;/b&gt;&lt;br&gt;&lt;br&gt;1. Download and install the &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=17630"&gt;ILMerge&lt;/a&gt; utility.&lt;ul&gt;&lt;li&gt;&lt;i&gt;&lt;b&gt;Note&lt;/b&gt;: You may copy the "ILMerge.exe" and put it into any custom folder, as long as you change to the correct path in your post-build command line.&lt;/i&gt;&lt;/ul&gt;&lt;br&gt;2. Create a batch file named as "&lt;b&gt;ILMergeHelper.bat&lt;/b&gt;" with the following contents:&lt;br&gt;&lt;pre style='color:#000020;background:#f6f8ff;'&gt;&lt;span style='color:#308080; '&gt;@&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO OFF&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#############################################################################################################&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#### ILMergeHelper.bat&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#### A utility to perform ILMerge using the Post-build event from the Visual Studio project&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#### Author: Weizh Chang&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;####&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#### Usage: ILMergeHelper.bat &amp;lt;targetDir&gt; &amp;lt;targetFileName&gt; &amp;lt;solutionName&gt; &amp;lt;inputAssemblies&gt; [cleanAssemblies]&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;####&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#### Example (set in Post-build event): &lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#### ILMergeHelper.bat $(TargetDir) $(TargetFileName) $(SolutionName) "support*.dll" "support*.dll"&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#############################################################################################################&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;@&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO ON&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#### Set variables from arguments&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; targetDir&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%1&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; targetFileName&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%2&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; solutionName&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; inputAssemblies&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%4&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; inputAssemblies&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%inputAssemblies:"=%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; cleanAssemblies&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%5&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%cleanAssemblies%&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; cleanAssemblies&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%inputAssemblies%"&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; cleanAssemblies&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%cleanAssemblies:"=%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; mergedDir&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%targetDir%&lt;/span&gt;..&lt;span style='color:#308080; '&gt;\&lt;/span&gt;ReleaseMerged&lt;span style='color:#308080; '&gt;\&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#### Set the merged file name&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; mergedFileName&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%targetFileName%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#### Remove existing merged directory&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;EXIST&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%mergedDir%&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;RD&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;S &lt;span style='color:#308080; '&gt;/&lt;/span&gt;Q &lt;span style='color:#007d45; '&gt;%mergedDir%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#### Copy all contents from the build target folder to the merged folder&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;XCOPY&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%targetDir%&lt;/span&gt;* &lt;span style='color:#007d45; '&gt;%mergedDir%&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;i &lt;span style='color:#308080; '&gt;/&lt;/span&gt;E &lt;span style='color:#308080; '&gt;/&lt;/span&gt;Y &lt;span style='color:#308080; '&gt;/&lt;/span&gt;Q&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;CD&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;D &lt;span style='color:#1060b6; '&gt;"%mergedDir%"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#### Perform ILMerge&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#008c00; '&gt;%~dp0&lt;/span&gt;ILMerge &lt;span style='color:#308080; '&gt;/&lt;/span&gt;lib&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%mergedDir%&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;wildcards &lt;span style='color:#308080; '&gt;/&lt;/span&gt;allowDup &lt;span style='color:#308080; '&gt;/&lt;/span&gt;ndebug &lt;span style='color:#308080; '&gt;/&lt;/span&gt;out&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%mergedDir%&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%mergedFileName%&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%targetFileName%&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%inputAssemblies%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;#### Delete all assemblies that have been merged&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;DEL&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;Q &lt;span style='color:#007d45; '&gt;%cleanAssemblies%&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;3. Put this file into the same folder as ILMerge.exe (e.g. C:\Program Files\Microsoft\ILMerge\).&lt;br&gt;&lt;br&gt;4. Open your project's Properties &gt; Build Events &gt; &lt;b&gt;Post-build event&lt;/b&gt;, and enter the ILMergeHelper command. For example:&lt;br&gt;&lt;pre style='color:#000020;background:#f6f8ff;'&gt;"C:\Program Files\Microsoft\ILMerge&lt;span style='color:#308080; '&gt;\&lt;/span&gt;ILMergeHelper.bat" $&lt;span style='color:#308080; '&gt;(&lt;/span&gt;TargetDir&lt;span style='color:#308080; '&gt;)&lt;/span&gt; $&lt;span style='color:#308080; '&gt;(&lt;/span&gt;TargetFileName&lt;span style='color:#308080; '&gt;)&lt;/span&gt; $&lt;span style='color:#308080; '&gt;(&lt;/span&gt;SolutionName&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"support*.dll MySql*.dll"&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"support*.* MySql*.* test.xml"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;i&gt;&lt;b&gt;Note:&lt;/b&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;The above example merges all assemblies named support*.dll and MySql*.dll, then delete all files with names support*.*, MySql*.* and test.xml.&lt;li&gt;This example uses macros &lt;b&gt;$(TargetDir)&lt;/b&gt; and &lt;b&gt;$(TargetFileName)&lt;/b&gt; as the merged output directory and file name. You may change them to other values you preferred.&lt;/ul&gt;&lt;/i&gt;&lt;br&gt;5. Build the project. The merged assembly is created inside the "&lt;b&gt;ReleaseMerged&lt;/b&gt;" folder.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Additional Resources:&lt;/b&gt;&lt;br&gt;Assemblies Merging With ILMerge and MSBuild (TODO)&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-4208401016666268243?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/4208401016666268243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2011/10/assemblies-merging-with-post-build.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/4208401016666268243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/4208401016666268243'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2011/10/assemblies-merging-with-post-build.html' title='Assemblies Merging With Post-build Event'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-1971562713937445888</id><published>2011-11-06T14:32:00.000+08:00</published><updated>2011-11-06T14:32:38.558+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>MySQL Table Name Starts With 'test'</title><content type='html'>By default, the &lt;b&gt;`mysql.db`&lt;/b&gt; table contains rows that permit access by any user to the &lt;b&gt;`test`&lt;/b&gt; database and other databases with names that start with &lt;b&gt;`test`&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;To disable this, after a fresh MySQL installation, please run the following command:&lt;pre style='color:#000020;background:#f6f8ff;'&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;DELETE&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;FROM&lt;/span&gt; mysql&lt;span style='color:#308080; '&gt;.&lt;/span&gt;db &lt;span style='color:#200080; font-weight:bold; '&gt;WHERE&lt;/span&gt; Db &lt;span style='color:#400000; '&gt;LIKE&lt;/span&gt;&lt;span style='color:#1060b6; '&gt; &lt;/span&gt;&lt;span style='color:#800000; '&gt;'&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;test&lt;/span&gt;&lt;span style='color:#007997; '&gt;%&lt;/span&gt;&lt;span style='color:#800000; '&gt;'&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-1971562713937445888?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/1971562713937445888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2011/11/mysql-table-name-starts-with-test.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/1971562713937445888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/1971562713937445888'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2011/11/mysql-table-name-starts-with-test.html' title='MySQL Table Name Starts With &apos;test&apos;'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-7381512623972137285</id><published>2011-11-06T14:29:00.000+08:00</published><updated>2011-11-06T14:29:54.375+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Capture The DataGridView CheckBox Column Click Event</title><content type='html'>The .Net DataGridView CheckBox Column control can be a bit tricky to use. Recently I've encountered a problem where I need to do some calculations when a user checks or unchecks the CheckBox. However, the events triggered always seems to return the previous value. E.g. When the CheckBox is checked (true), the value is captured as uncheck (false), and vice-versa.&lt;br /&gt;&lt;br /&gt;After some digging around, I found that using both "&lt;b&gt;CellContentClick&lt;/b&gt;" and "&lt;b&gt;CellContentDoubleClick&lt;/b&gt;" events can do the trick. &lt;br /&gt;&lt;br /&gt;For example, we have a grid named "&lt;b&gt;myGrid&lt;/b&gt;" with columns "colTick" (the CheckBox) and "colAmt" (an amount field). Bind this grid to the following 2 events:&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; myGrid_CellContentClick(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, DataGridViewCellEventArgs e)&lt;br /&gt;{&lt;br /&gt;    GetTotalSelection(e.ColumnIndex, e.RowIndex);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; myGrid_CellContentDoubleClick(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, DataGridViewCellEventArgs e)&lt;br /&gt;{&lt;br /&gt;    GetTotalSelection(e.ColumnIndex, e.RowIndex);&lt;br /&gt;}&lt;/pre&gt;Then we process the checked row values in the "&lt;b&gt;GetTotalSelection&lt;/b&gt;" method, accumulating the total selected amount into a private variable "_totalSelAmt":&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; _totalSelAmt = 0;&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// Calculates total amount selected.&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetTotalSelection(&lt;span class="kwrd"&gt;int&lt;/span&gt; colIndex, &lt;span class="kwrd"&gt;int&lt;/span&gt; rowIndex)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (colIndex &amp;lt; 0 || rowIndex &amp;lt; 0)&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (myGrid.Columns[colIndex].Name != colTick.Name)&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    myGrid.EndEdit();&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;bool&lt;/span&gt; tick      = Convert.ToBoolean(myGrid[colIndex, rowIndex].Value);     &lt;span class="rem"&gt;// Gets the current row check value.&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;decimal&lt;/span&gt; selAmt = Convert.ToDecimal(myGrid[colAmt.Name, rowIndex].Value);  &lt;span class="rem"&gt;// Gets the current row amount.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (tick)&lt;br /&gt;        _totalSelAmt += selAmt;&lt;br /&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;        _totalSelAmt -= selAmt;&lt;br /&gt;}&lt;/pre&gt;Now, every time a user checks or unchecks the CheckBox, the variable "_totalSelAmt" will be updated with the latest total selected amount.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-7381512623972137285?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/7381512623972137285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2011/11/capture-datagridview-checkbox-column.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/7381512623972137285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/7381512623972137285'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2011/11/capture-datagridview-checkbox-column.html' title='Capture The DataGridView CheckBox Column Click Event'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-2561826754444391053</id><published>2011-10-04T15:08:00.000+08:00</published><updated>2011-10-04T15:12:24.160+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><title type='text'>Online Syntax Highlighting Using ToHtml.com</title><content type='html'>Just want to share a source code &lt;b&gt;syntax highlighting tool&lt;/b&gt; I discovered recently that is easy to use and supports many different languages, even the rare ones. &lt;br /&gt;&lt;br /&gt;The steps are rather straight forward. Just go to &lt;b&gt;&lt;a href="http://tohtml.com"&gt;ToHtml.com&lt;/a&gt;&lt;/b&gt;, paste your code inside the "&lt;b&gt;Source Code&lt;/b&gt;" panel. Then choose your language type and hit "&lt;b&gt;Highlight&lt;/b&gt;". In a short while your code will be formatted into the "&lt;b&gt;HTML code&lt;/b&gt;" panel, which you can just copy and paste directly into your web site or blog. In addition, you can also select the style you want, and preview the formatted output.&lt;br /&gt;&lt;br /&gt;There is no worries on any special characters like &amp;gt; or &amp;lt;, it will take care for you as well.&lt;br /&gt;&lt;br /&gt;Originally I was trying to use &lt;b&gt;&lt;a href="http://alexgorbatchev.com/SyntaxHighlighter/"&gt;SyntaxHighlighter&lt;/a&gt;&lt;/b&gt;, but after spending much time troubleshooting, it just won't work on this blog. I'm not sure where I did wrong, maybe I will give it another shot when I have more time to spare. However, for now, I think this online tool already can fulfill my needs. Cheers :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-2561826754444391053?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/2561826754444391053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2011/10/online-syntax-highlighting-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/2561826754444391053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/2561826754444391053'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2011/10/online-syntax-highlighting-using.html' title='Online Syntax Highlighting Using ToHtml.com'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-7579506864564979889</id><published>2011-10-04T14:16:00.002+08:00</published><updated>2011-10-04T15:21:28.558+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>Update MySQL Table Field With Value Derived From Another Table</title><content type='html'>If you need to update certain field in a table with value derived from another table (e.g. performing a sum), you could do this using a JOIN statement in the following way (which I referred from &lt;a href="http://forums.mysql.com/read.php?10,285358,285732#msg-285732"&gt;this post&lt;/a&gt;):&lt;br /&gt;&lt;pre style='color:#000020;background:#f6f8ff;'&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;UPDATE&lt;/span&gt; table1 a&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;JOIN&lt;/span&gt;&lt;br /&gt;   &lt;span style='color:#308080; '&gt;(&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;SELECT&lt;/span&gt; batch_no&lt;span style='color:#406080; '&gt;,&lt;/span&gt; &lt;span style='color:#400000; '&gt;SUM&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;sale_amt&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;AS&lt;/span&gt; sum_sale_amt&lt;br /&gt;     &lt;span style='color:#200080; font-weight:bold; '&gt;FROM&lt;/span&gt; table2&lt;br /&gt;     &lt;span style='color:#200080; font-weight:bold; '&gt;WHERE&lt;/span&gt; source &lt;span style='color:#308080; '&gt;=&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;'SALE'&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:#200080; font-weight:bold; '&gt;GROUP&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;BY&lt;/span&gt; batch_no&lt;br /&gt;   &lt;span style='color:#308080; '&gt;)&lt;/span&gt; b &lt;span style='color:#200080; font-weight:bold; '&gt;ON&lt;/span&gt; &lt;br /&gt;   b&lt;span style='color:#308080; '&gt;.&lt;/span&gt;batch_no &lt;span style='color:#308080; '&gt;=&lt;/span&gt; a&lt;span style='color:#308080; '&gt;.&lt;/span&gt;batch_no&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; a&lt;span style='color:#308080; '&gt;.&lt;/span&gt;total_sale_amt &lt;span style='color:#308080; '&gt;=&lt;/span&gt; b&lt;span style='color:#308080; '&gt;.&lt;/span&gt;sum_sale_amt&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;WHERE&lt;/span&gt; a&lt;span style='color:#308080; '&gt;.&lt;/span&gt;cancel &lt;span style='color:#308080; '&gt;&amp;lt;&gt;&lt;/span&gt; &lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;span style='color:#406080; '&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;In the above example, we sum the `sale_amt` from `table2` where the `source` is 'SALE', grouped by `batch_no`, into an alias `sum_sale_amt`. Then we update this sum into `table1`'s field `total_sale_amt` based on the `batch_no`. This update only applies to `table1` records which is not cancelled.&lt;br /&gt;&lt;br /&gt;This query can be run multiple-times to update/fix any inconsistency error when saving from the derived values.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-7579506864564979889?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/7579506864564979889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2011/10/update-mysql-table-field-with-value.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/7579506864564979889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/7579506864564979889'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2011/10/update-mysql-table-field-with-value.html' title='Update MySQL Table Field With Value Derived From Another Table'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-3786942971321895389</id><published>2011-10-02T15:29:00.002+08:00</published><updated>2011-10-04T14:17:09.540+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><title type='text'>Subversion: Post-Commit Email Notification</title><content type='html'>A Subversion repository has a post-commit "hook" which is invoked on every SVN commit. This can be used to send email notifications to all team members involved.&lt;br /&gt;&lt;br /&gt;The following is my two-script method inspired by Andrew Farley's &lt;a href="http://andrewfarley.com/sysadmin/svn-commit-automatic-email"&gt;SVN Post-Commit Automatic Email&lt;/a&gt;.&lt;br /&gt;With this method, we can set different emails for each repositories, and we only have to keep the main script in one place for easy maintenance.&lt;br /&gt;&lt;br /&gt;This script is easy to configure and highly customizable. As a batch script, it can be used by Subversion on Windows.&lt;br /&gt; &lt;a href="http://www.blat.net"&gt;Blat&lt;/a&gt; is required for sending email. You only need to change the values in the "Begin/End Settings" section. Please refer the script header remarks for more information and other options.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How to use:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1. Create a batch file named as "&lt;b&gt;weizh-post-commit-email.bat&lt;/b&gt;" with the following contents:&lt;br /&gt;&lt;br /&gt;&lt;pre style='color:#000020;background:#f6f8ff;'&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO OFF&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;=====================================================================================&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Copyright 2011 Weizh Chang&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;This program is free software: you can redistribute it and/or modify&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;it under the terms of the GNU General Public License as published by&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;the Free Software Foundation, either version 3 of the License, or&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;(at your option) any later version.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;This program is distributed in the hope that it will be useful,&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;GNU General Public License for more details.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;You should have received a copy of the GNU General Public License&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;This script is inspired by 'SVN Post-Commit Automatic Email' by Andrew Farley&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;(andrewfarley.com/sysadmin/svn-commit-automatic-email).&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;=====================================================================================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;=====================================================================================&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Program    : Weizh SVN Post-Commit Email Batch Script&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;File       : weizh-post-commit-email.bat&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Version    : 1.0.0.0&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;URL        : simpcode.blogspot.com&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Description:&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Please change the settings in the Begin/End Settings section below.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;This script requires:&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- post-commit.bat (the caller).&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- blat emailer tool (www.blat.net).&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- usermap (optional - see below).&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Features:&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- Sends SVN post commit email notification.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- Allows multiple common email recipients for all repositories.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- Allows multiple custom email recipients for each repository.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- Option to include the SVN Diff in the email.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- Option to skip sending email using the 'no email' tag in the log.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;- Option to use usermap (see below).&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;usermap:&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;This script is able to read the authorized svn users from conf\authz, and map to&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;the users' emails in a 'usermap' file. These emails will be used as part of &lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;the receiver emails. This feature can be disabled by changing the &lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;Settings' usermap to empty.&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;The following example shows how a 'usermap' file content may look like:&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;harry=name=Harry Smith&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;harry=email=harry@example.com&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;sally=name=Sally Anderson&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;sally=email=sally@example.com,sally@example2.com&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;=====================================================================================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO ON&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; repos&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%1&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; rev&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%2&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; reposName&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%3&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendTo&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%4&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendToCc&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;================ Begin Settings ====================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set email settings&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; emailServer&lt;span style='color:#308080; '&gt;=&lt;/span&gt;mail.example.com&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; emailPort&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;25&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; emailUid&lt;span style='color:#308080; '&gt;=&lt;/span&gt;admin&lt;span style='color:#308080; '&gt;@&lt;/span&gt;example.com&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; emailPwd&lt;span style='color:#308080; '&gt;=&lt;/span&gt;adminPassw0rd&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendFrom&lt;span style='color:#308080; '&gt;=&lt;/span&gt;admin&lt;span style='color:#308080; '&gt;@&lt;/span&gt;example.com&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendTry&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set common receiver/cc email (comma separated, without quotes and spaces)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendToCommon&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendToCcCommon&lt;span style='color:#308080; '&gt;=&lt;/span&gt;michelle&lt;span style='color:#308080; '&gt;@&lt;/span&gt;example.com&lt;span style='color:#308080; '&gt;,&lt;/span&gt;alex&lt;span style='color:#308080; '&gt;@&lt;/span&gt;example.com&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set the blat exe directory&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; emailDir&lt;span style='color:#308080; '&gt;=&lt;/span&gt;C&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;\&lt;/span&gt;blat&lt;span style='color:#308080; '&gt;\&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set the SVN bin directory&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; svnDir&lt;span style='color:#308080; '&gt;=&lt;/span&gt;C&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;\&lt;/span&gt;svnserve&lt;span style='color:#308080; '&gt;\&lt;/span&gt;bin&lt;span style='color:#308080; '&gt;\&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set the SVN Diff line limit (-1 to not show any)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; limitDiff&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set the usermap file location (leave empty if not using usermap)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; usermap&lt;span style='color:#308080; '&gt;=&lt;/span&gt;D&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;\&lt;/span&gt;svn_repos&lt;span style='color:#308080; '&gt;\&lt;/span&gt;scripts&lt;span style='color:#308080; '&gt;\&lt;/span&gt;usermap&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set no email tag. If this tag exists at the beginning of a line in the log,&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== no email will be sent (leave empty if not using this feature)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; noEmailTag&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;[&lt;/span&gt;noemail&lt;span style='color:#308080; '&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;================ End Settings ======================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Remove surrounding quotes&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; repos&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%repos:"=%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; rev&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%rev:"=%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; reposName&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%reposName:"=%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendTo&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%sendTo:"=%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendToCc&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%sendToCc:"=%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set reposName to repos if empty&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%reposName%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; reposName&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%repos%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Get svn author&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;FOR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=*"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;R &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;'&lt;span style='color:#1060b6; '&gt;"%svnDir%svnlook.exe"&lt;/span&gt; author &lt;span style='color:#308080; '&gt;-&lt;/span&gt;r &lt;span style='color:#007d45; '&gt;%rev%&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%repos%&lt;/span&gt;'&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; author&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;R&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; authorName&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set email temp file&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; tmpFile&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%~dp0&lt;/span&gt;svn&lt;span style='color:#308080; '&gt;-&lt;/span&gt;email&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%rev%&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%RANDOM%&lt;/span&gt;.tmp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;================ Begin Read Usermap ================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Skip if usermap not exist&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%usermap%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;GOTO &lt;/span&gt;&lt;span style='color:#e34adc; '&gt;SendEmail&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;EXIST&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%usermap%&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;GOTO &lt;/span&gt;&lt;span style='color:#e34adc; '&gt;SendEmail&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SETLOCAL&lt;/span&gt; ENABLEDELAYEDEXPANSION&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set authz file&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; reposAuthz&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%repos:/=\%&lt;/span&gt;&lt;span style='color:#308080; '&gt;\&lt;/span&gt;conf&lt;span style='color:#308080; '&gt;\&lt;/span&gt;authz&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendToMap&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; authorName&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;FOR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=1,2,3 delims=="&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;A &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%usermap%&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%%%A:~0,1%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"#"&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%%B"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"email"&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%%C"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; count&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== If user exists in authz, append the emails to sendToMap&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;FOR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=1 delims=="&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;U &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;'&lt;span style='color:#200080; font-weight:bold; '&gt;FINDSTR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;I &lt;span style='color:#308080; '&gt;/&lt;/span&gt;B &lt;span style='color:#1060b6; '&gt;"%%A.*\=.*r"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%reposAuthz%&lt;/span&gt;'&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#595979; '&gt;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&amp;#xa0;&lt;/span&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Remove any spaces&lt;/span&gt;&lt;br /&gt;                    &lt;span style='color:#200080; font-weight:bold; '&gt;FOR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=1 delims= "&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;Y &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%%U"&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;                        &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%%Y"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%%A"&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;                            &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; !count!&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;0&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;                                &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"!sendToMap!"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendToMap&lt;span style='color:#308080; '&gt;=&lt;/span&gt;!sendToMap!&lt;span style='color:#308080; '&gt;,&lt;/span&gt;&lt;br /&gt;                                &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendToMap&lt;span style='color:#308080; '&gt;=&lt;/span&gt;!sendToMap!&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;C&lt;br /&gt;                                &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; count&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;1&lt;/span&gt;&lt;br /&gt;                            &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;                        &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;                    &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#308080; '&gt;)&lt;/span&gt; ELSE &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;            &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%%B"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"name"&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;                &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%%A"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%author%"&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; authorName&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;C&lt;br /&gt;            &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;        &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; mapReturns&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;^&lt;/span&gt;&lt;br /&gt;  &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendToMap&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%sendToMap%&lt;/span&gt;&lt;span style='color:#308080; '&gt;^&lt;/span&gt;&lt;span style='color:#308080; '&gt;&amp;amp;&lt;/span&gt;&lt;span style='color:#308080; '&gt;^&lt;/span&gt;&lt;br /&gt;  &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; authorName&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%authorName%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ENDLOCAL&lt;/span&gt; &lt;span style='color:#308080; '&gt;&amp;amp;&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%mapReturns%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Append to the existing sendTo&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%sendToMap%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%sendTo%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendTo&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%sendTo%&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendTo&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%sendTo%&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%sendToMap%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;================ End Read Usermap ==================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#e34adc; '&gt;:SendEmail&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Append any common emails&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%sendToCommon%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%sendTo%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendTo&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%sendTo%&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendTo&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%sendTo%&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%sendToCommon%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%sendToCcCommon%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%sendToCc%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendToCc&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%sendToCc%&lt;/span&gt;&lt;span style='color:#308080; '&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendToCc&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%sendToCc%&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%sendToCcCommon%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Exit if sendTo is empty&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%sendTo%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;GOTO &lt;/span&gt;&lt;span style='color:#e34adc; '&gt;Finish&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set sendTo with surrounding quotes&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendTo&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%sendTo%"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set sendToCc with argument switch and surrounding quotes&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%sendToCc%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendToCc&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;cc &lt;span style='color:#1060b6; '&gt;"%sendToCc%"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Get svn date and time&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;FOR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=1,2"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;R &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;'&lt;span style='color:#1060b6; '&gt;"%svnDir%svnlook.exe"&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;date&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;r &lt;span style='color:#007d45; '&gt;%rev%&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%repos%&lt;/span&gt;'&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; svnDate&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;R&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; svnTime&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;S&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set email subject&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; subject&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;[&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%reposName%&lt;/span&gt;&lt;span style='color:#308080; '&gt;]&lt;/span&gt; SVNCommit &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%author%&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; Rev&lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%rev%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set email body&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Dear Developers&lt;span style='color:#308080; '&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%authorName%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; There is an SVN Commit &lt;span style='color:#200080; font-weight:bold; '&gt;on&lt;/span&gt;  &lt;span style='color:#308080; '&gt;[&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%reposName%&lt;/span&gt; &lt;span style='color:#308080; '&gt;]&lt;/span&gt;  by &lt;span style='color:#007d45; '&gt;%authorName%&lt;/span&gt; &lt;span style='color:#308080; '&gt;^&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%author%&lt;/span&gt;&lt;span style='color:#308080; '&gt;^&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; ELSE &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; There is an SVN Commit &lt;span style='color:#200080; font-weight:bold; '&gt;on&lt;/span&gt;  &lt;span style='color:#308080; '&gt;[&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%reposName%&lt;/span&gt; &lt;span style='color:#308080; '&gt;]&lt;/span&gt;  by &lt;span style='color:#007d45; '&gt;%author%&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Please SVN Update your working &lt;span style='color:#200080; font-weight:bold; '&gt;copy&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt; SVN Commit Notification &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Repository&lt;span style='color:#308080; '&gt;:&lt;/span&gt;    &lt;span style='color:#007d45; '&gt;%reposName%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Revision&lt;span style='color:#308080; '&gt;:&lt;/span&gt;      &lt;span style='color:#007d45; '&gt;%rev%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Author&lt;span style='color:#308080; '&gt;:&lt;/span&gt;        &lt;span style='color:#007d45; '&gt;%author%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;Date&lt;/span&gt;&lt;span style='color:#308080; '&gt;:&lt;/span&gt;          &lt;span style='color:#007d45; '&gt;%svnDate%&lt;/span&gt;      &lt;span style='color:#200080; font-weight:bold; '&gt;Time&lt;/span&gt;&lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%svnTime%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Log Message&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%tmpFile%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Get svn log&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;FOR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=*"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;R &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;'&lt;span style='color:#1060b6; '&gt;"%svnDir%svnlook.exe"&lt;/span&gt; log &lt;span style='color:#308080; '&gt;-&lt;/span&gt;r &lt;span style='color:#007d45; '&gt;%rev%&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%repos%&lt;/span&gt;'&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;R &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%tmpFile%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== If the 'no email tag' exists in the log, exit without sending email&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%noEmailTag%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;""&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;    &lt;span style='color:#200080; font-weight:bold; '&gt;FOR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=*"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;E &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;'&lt;span style='color:#200080; font-weight:bold; '&gt;FINDSTR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;I &lt;span style='color:#308080; '&gt;/&lt;/span&gt;B &lt;span style='color:#308080; '&gt;/&lt;/span&gt;C&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"%noEmailTag%"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%tmpFile%&lt;/span&gt;'&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;GOTO &lt;/span&gt;&lt;span style='color:#e34adc; '&gt;Finish&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Changes&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%tmpFile%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Get svn changed&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;FOR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=*"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;R &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;'&lt;span style='color:#1060b6; '&gt;"%svnDir%svnlook.exe"&lt;/span&gt; changed &lt;span style='color:#308080; '&gt;-&lt;/span&gt;r &lt;span style='color:#007d45; '&gt;%rev%&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%repos%&lt;/span&gt;'&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;R &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%tmpFile%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;NOT&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%limitDiff%"&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#1060b6; '&gt;"-1"&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Diff&lt;span style='color:#308080; '&gt;:&lt;/span&gt; &lt;span style='color:#308080; '&gt;^&lt;/span&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;only first &lt;span style='color:#007d45; '&gt;%limitDiff%&lt;/span&gt; lines shown&lt;span style='color:#308080; '&gt;^&lt;/span&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%tmpFile%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Get svn diff&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;FOR&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;F &lt;span style='color:#1060b6; '&gt;"tokens=*"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;R &lt;span style='color:#200080; font-weight:bold; '&gt;IN&lt;/span&gt; &lt;span style='color:#308080; '&gt;(&lt;/span&gt;'&lt;span style='color:#1060b6; '&gt;"%svnDir%svnlook.exe"&lt;/span&gt; diff &lt;span style='color:#308080; '&gt;-&lt;/span&gt;r &lt;span style='color:#007d45; '&gt;%rev%&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%repos%&lt;/span&gt; &lt;span style='color:#308080; '&gt;^&lt;/span&gt;&lt;span style='color:#308080; '&gt;|&lt;/span&gt; head &lt;span style='color:#308080; '&gt;-&lt;/span&gt;&lt;span style='color:#308080; '&gt;-&lt;/span&gt;lines&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%limitDiff%&lt;/span&gt;'&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DO&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%%&lt;/span&gt;R &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%tmpFile%&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#308080; '&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt;.&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; Regards&lt;span style='color:#308080; '&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;ECHO&lt;/span&gt; SVN Server Admin&lt;br /&gt;&lt;span style='color:#308080; '&gt;)&lt;/span&gt; &lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#308080; '&gt;&gt;&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%tmpFile%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Send email&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#1060b6; '&gt;"%emailDir%blat.exe"&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%tmpFile%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;server &lt;span style='color:#007d45; '&gt;%emailServer%&lt;/span&gt;&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#007d45; '&gt;%emailPort%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;f &lt;span style='color:#007d45; '&gt;%emailUid%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;u &lt;span style='color:#007d45; '&gt;%emailUid%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;pw &lt;span style='color:#007d45; '&gt;%emailPwd%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;from &lt;span style='color:#007d45; '&gt;%sendFrom%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;to &lt;span style='color:#007d45; '&gt;%sendTo%&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%sendToCc%&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;subject &lt;span style='color:#1060b6; '&gt;"%subject%"&lt;/span&gt; &lt;span style='color:#308080; '&gt;-&lt;/span&gt;try &lt;span style='color:#007d45; '&gt;%sendTry%&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#e34adc; '&gt;:Finish&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Cleanup&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;IF&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;EXIST&lt;/span&gt; &lt;span style='color:#007d45; '&gt;%tmpFile%&lt;/span&gt; &lt;span style='color:#200080; font-weight:bold; '&gt;DEL&lt;/span&gt; &lt;span style='color:#308080; '&gt;/&lt;/span&gt;Q &lt;span style='color:#007d45; '&gt;%tmpFile%&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2. Set values in the Begin/End Settings section. Put this file inside a folder accessible by all repositories. For instance, If your repository root folder is "D:\svn_repos\", you may put it inside "D:\svn_repos\scripts\".&lt;br /&gt;&lt;br /&gt;3. Create another batch file named as "&lt;b&gt;post-commit.bat&lt;/b&gt;" with the following contents:&lt;br /&gt;&lt;br /&gt;&lt;pre style='color:#000020;background:#f6f8ff;'&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; repos&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%1&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; rev&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;span style='color:#008c00; '&gt;%2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set repository name for display only, if empty will be same as repos&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; reposName&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;REM &lt;/span&gt;&lt;span style='color:#595979; '&gt;==== Set receiver/cc email (comma separated, without quotes and spaces)&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendTo&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;br /&gt;&lt;span style='color:#200080; font-weight:bold; '&gt;SET&lt;/span&gt; sendToCc&lt;span style='color:#308080; '&gt;=&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;D&lt;span style='color:#308080; '&gt;:&lt;/span&gt;&lt;span style='color:#308080; '&gt;\&lt;/span&gt;svn_repos&lt;span style='color:#308080; '&gt;\&lt;/span&gt;scripts&lt;span style='color:#308080; '&gt;\&lt;/span&gt;weizh&lt;span style='color:#308080; '&gt;-&lt;/span&gt;post&lt;span style='color:#308080; '&gt;-&lt;/span&gt;commit&lt;span style='color:#308080; '&gt;-&lt;/span&gt;email.bat &lt;span style='color:#1060b6; '&gt;"%repos%"&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%rev%"&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%reposName%"&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%sendTo%"&lt;/span&gt; &lt;span style='color:#1060b6; '&gt;"%sendToCc%"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4. Set the repository's name and receiver/cc emails if any. Change the "D:\svn_repos\scripts" to your path. Put this file inside each repository's "hooks" folder.&lt;br /&gt;&lt;br /&gt;Whenever there is a commit, an email will be sent to the relevant recipients with contents such as below:&lt;pre&gt;&lt;br /&gt;Dear Developers,&lt;br /&gt;&lt;br /&gt;There is an SVN Commit on  [ XXXX ]  by Harry Smith (harry).&lt;br /&gt;Please SVN Update your working copy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-------------------- SVN Commit Notification --------------------&lt;br /&gt;Repository:    XXXX&lt;br /&gt;Revision:      139&lt;br /&gt;Author:        harry&lt;br /&gt;Date:          2011-10-01      Time: 19:53:53&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;Log Message:&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;Added and modified on some stuff.&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;Changes:&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;U  Trunk/Foo/&lt;br /&gt;U  Trunk/Foo/Foo.csproj&lt;br /&gt;A  Trunk/Foo/Helper.cs&lt;br /&gt;U  Trunk/Foo/Customer.cs&lt;br /&gt;U  Trunk/Foo/Properties/AssemblyInfo.cs&lt;br /&gt;D  Trunk/Foo/Test.txt&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;SVN Server Admin&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-3786942971321895389?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/3786942971321895389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2011/10/subversion-post-commit-email.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/3786942971321895389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/3786942971321895389'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2011/10/subversion-post-commit-email.html' title='Subversion: Post-Commit Email Notification'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-2698001727110769401</id><published>2011-09-25T14:22:00.001+08:00</published><updated>2011-09-25T14:23:34.224+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Delete rows in DataTable using "foreach"</title><content type='html'>If you try to delete multiple rows in a DataTable with certain conditions using the &lt;b&gt;foreach&lt;/b&gt; loop, you may get the following error:&lt;br /&gt;&lt;code&gt;"Collection was modified; enumeration operation might not execute."&lt;/code&gt;&lt;br /&gt;For such cases, use the following method:&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;DataRow[] deleteRows = myDataTable.Select(&lt;span class="str"&gt;"mycondition = true"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt; (DataRow deleteRow &lt;span class="kwrd"&gt;in&lt;/span&gt; deleteRows)&lt;br /&gt;{&lt;br /&gt;    deleteRow.Delete();&lt;br /&gt;    deleteFound = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-2698001727110769401?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/2698001727110769401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2011/09/delete-rows-in-datatable-using-foreach.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/2698001727110769401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/2698001727110769401'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2011/09/delete-rows-in-datatable-using-foreach.html' title='Delete rows in DataTable using &quot;foreach&quot;'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-1919202184395491879</id><published>2009-08-27T19:43:00.005+08:00</published><updated>2009-08-27T19:51:28.197+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><title type='text'>Subversion: Client: Installation and Guidelines</title><content type='html'>This is the third section of the Subversion topic. The first and second sections can be found &lt;a href="http://simpcode.blogspot.com/2008/07/subversion-server-setting-up-svnserve.html"&gt;here&lt;/a&gt; and &lt;a href="http://simpcode.blogspot.com/2008/08/subversion-server-setting-up-svnserve.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;Note&lt;/span&gt;&lt;/span&gt;: This topic is more like a &lt;span style="font-style: italic;"&gt;walk-through&lt;/span&gt; than a complete guidelines. And is basically based on the great documentations found on the &lt;a href="http://tortoisesvn.net/"&gt;TortoiseSVN website&lt;/a&gt; and various sources. You can refer the site for more explanation if needed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; Client: Installation and Guidelines&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-size: 85%;"&gt;&lt;span style="font-weight: bold;"&gt;Part 1: Installation&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Install TortoiseSVN&lt;/b&gt; (e.g. TortoiseSVN-1.4.X.XXXX-win32-svn-1.4.X.msi).&lt;/li&gt;&lt;ul&gt;&lt;li&gt;After installed, right click &amp;gt; Settings &amp;gt; General &amp;gt; &lt;/li&gt;&lt;li&gt;Tick Use "_svn" instead of ".svn" directories &lt;/li&gt;&lt;li&gt;Tick Set fildates to the "last commit times"&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Part 2: Importing Data Into A Repository and Checking Out From A Repository&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Before importing, please &lt;b&gt;organize the project folder&lt;/b&gt; and take away unused files that are not needed to build the project.&lt;/li&gt;&lt;li&gt;Right-click on the (top-level) project folder, select TortoiseSVN &amp;gt; &lt;b&gt;Import&lt;/b&gt;. All the contents of the folder will be &lt;b&gt;imported into the repository&lt;/b&gt;, under version control.&lt;/li&gt;&lt;li&gt;The project folder used for importing is unversioned and cannot be used for "Check Out" (See "Check Out A Working Copy" below). If the project folder (source tree) is also used as the working copy, you have to either:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;After the folder is imported into the repository, delete the folder, then do "Check Out" to a new folder with the same name, or&lt;/li&gt;&lt;li&gt;"Check Out" to a different folder, or&lt;/li&gt;&lt;li&gt;"Check Out" to an empty folder, then copy the content to the folder. Select TortoiseSVN &amp;gt; Add to add the files needed for version control. Then TortoiseSVN &amp;gt; Commit.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Check Out A Working Copy&lt;/b&gt; (client):&lt;/li&gt;&lt;ul&gt;&lt;li&gt;To obtain a working copy from a repository. Only can check out into an &lt;b&gt;empty folder&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Right-click on an empty folder &amp;gt; SVN Checkout&lt;/li&gt;&lt;li&gt;Can be perfomed on a sub-directory path instead of the whole repository path. Then the client only need to check out on the part that needed (e.g. trunk only).&lt;/li&gt;&lt;li&gt;The "Check Out" folder contents are now under version control.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;If certain folders/files need to be &lt;b&gt;ignored&lt;/b&gt;, select TortoiseSVN &amp;gt; Add to ignore list, or TortoiseSVN &amp;gt; Properties, Add "&lt;b&gt;svn:ignore&lt;/b&gt;", put the ignore pattern. E.g.:&lt;/li&gt;&lt;code style="font-size: 100%;"&gt;[Bb][Aa][Cc][Kk][Uu][Pp] [Uu][Nn][Uu][Ss][Ee] [Uu][Nn][Uu][Ss][Ee][Dd] *.[Bb][Aa][Kk] *.[Tt][Bb][Kk] *.[Ee][Xx][Ee] *.[Ee][Xx][Ee][1_]&lt;/code&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Part 3: Daily Use Guide&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;All TortoiseSVN commands are accessed with &lt;b&gt;right-clicking on a file or folder&lt;/b&gt;. The versioned folder contents will be indicated with &lt;b&gt;icon overlays&lt;/b&gt;. TortoiseSVN also provide right-drag functions.&lt;/li&gt;&lt;li&gt;Checking The Working Copy:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Right-click &amp;gt; TortoiseSVN &amp;gt; Check for modifications (To see changes in the client)&lt;/li&gt;&lt;li&gt;Click "Check Repository" to see changes in the server&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Update The Working Copy:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Right-click &amp;gt; &lt;b&gt;SVN Update&lt;/b&gt; (update the client)&lt;/li&gt;&lt;li&gt;Default update is from the repository's HEAD revision.&lt;/li&gt;&lt;li&gt;To update from a different revision (not recommended), select TortoiseSVN &amp;gt; Update to revision.&lt;/li&gt;&lt;li&gt;Note: SVN will never overwrite unversioned files.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Commit Changes To The Repository:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Select any file/folder, right-click &amp;gt; &lt;b&gt;SVN Commit&lt;/b&gt; &amp;gt; Select the changed files to be commited.&lt;/li&gt;&lt;li&gt;Only commit if the working copy is up-to-date and there are no conflicts.&lt;/li&gt;&lt;li&gt;Optionally, write a log message to describe the changes.&lt;/li&gt;&lt;li&gt;Optionally, files/folders can be ignored, refer &lt;a href="http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-ignore.html"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;If there are &lt;b&gt;conflicts during update or commit&lt;/b&gt;, either:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Double-click/right-click on the file to launch the diff/merge tool to show the changes (only for non-binary files), or&lt;/li&gt;&lt;li&gt;Manual checking and resolving the problem, or&lt;/li&gt;&lt;li&gt;TortoiseSVN &amp;gt; Resolve, to commit overwrite the repository, or&lt;/li&gt;&lt;li&gt;TortoiseSVN &amp;gt; Revert, to update overwrite the client&lt;/li&gt;&lt;li&gt;Refer: &lt;a href="http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-conflicts.html"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;To Add/Delete/Rename on version controlled files/folders, etiher:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Modify as usual in Windows Explorer, or&lt;/li&gt;&lt;li&gt;Right-click &amp;gt; TortoiseSVN &amp;gt; Add/Delete/Rename&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;To undo changes in client:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;TortoiseSVN &amp;gt; &lt;b&gt;Revert&lt;/b&gt;, to update overwrite the client.&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;span style="font-style: italic;font-size:90%;" &gt;Reference: File Version Used:&lt;br /&gt;Subversion (svn): 1.4.5&lt;br /&gt;TortoiseSVN: 1.4.8.12137 (win32)&lt;br /&gt;Cygwin: 1.5.25-14&lt;br /&gt;Putty, Puttygen, Pageant: 0.60&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-1919202184395491879?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/1919202184395491879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2009/08/subversion-client-installation-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/1919202184395491879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/1919202184395491879'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2009/08/subversion-client-installation-and.html' title='Subversion: Client: Installation and Guidelines'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-1013695610687218234</id><published>2008-08-16T16:28:00.013+08:00</published><updated>2011-10-13T19:56:07.186+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><title type='text'>Subversion: Server: Setting Up Svnserve With SSH</title><content type='html'>This is the second section of the Subversion topic. The first section can be found &lt;a href="http://simpcode.blogspot.com/2008/07/subversion-server-setting-up-svnserve.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;Note&lt;/span&gt;&lt;/span&gt;: This topic is more like a &lt;span style="font-style: italic;"&gt;walk-through&lt;/span&gt; than a complete guidelines. And is basically based on the great documentations found on the &lt;a href="http://tortoisesvn.net/"&gt;TortoiseSVN website&lt;/a&gt; and various sources. You can refer the site for more explanation if needed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Server: Setting Up Svnserve With SSH&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-size: 85%;"&gt;&lt;span style="font-weight: bold;"&gt;Part 1: Server Setup&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Login as Administrator.&lt;/li&gt;&lt;li&gt;Install SVN on the server (as described in &lt;a href="http://simpcode.blogspot.com/2008/07/subversion-server-setting-up-svnserve.html"&gt;Setting Up Svnserve&lt;/a&gt;).&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Close the svnserve service if it is running.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Create a new user account named “svnuser” (or any other name) with a password. Check that the user permissions are sufficient to read and write your SVN repository directory on the server.&lt;/li&gt;&lt;li&gt;Install &lt;span style="font-weight: bold;"&gt;Cygwin SSH daemon&lt;/span&gt; as described &lt;a href="http://pigtail.net/LRP/printsrv/cygwin-sshd.html"&gt;here&lt;/a&gt;.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Before step 5 (“ssh-host-config” section), open c:\cygwin\etc\hosts.allow with WordPad, make sure it looks like this (take note the hash #):&lt;br /&gt;&lt;code  style="font-size:100%;"&gt;#ALL : PARANOID : deny&lt;br /&gt;sshd: ALL&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Continue to do the “ssh-host-config” section.&lt;/li&gt;&lt;li&gt;Continue to do the “Test the sshd” section.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Also test on “ssh svnuser@localhost”&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Skip the other sections unless specially needed.&lt;/li&gt;&lt;li&gt;Type “logout” untill the cygwin window is closed.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Download &lt;span style="font-weight: bold;"&gt;PuTTY&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;PuTTYgen&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Pageant &lt;/span&gt;from &lt;a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html"&gt;here&lt;/a&gt; and place the EXEs in c:\cygwin&lt;/li&gt;&lt;li&gt;In Windows, logout as Administrator, then &lt;span style="font-weight: bold;"&gt;login as svnuser&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Create a &lt;span style="font-weight: bold;"&gt;key pair&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;Replace the ‘svnharrykey’ in sample below with your preferred key name&lt;/span&gt;):&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Open a cygwin window. Will be logged in as &lt;span style="font-weight: bold;"&gt;svnuser &lt;/span&gt;by default.&lt;/li&gt;&lt;code style="font-size:100%;"&gt;$ cd /home/svnuser&lt;br /&gt;$ mkdir .ssh&lt;br /&gt;$ ssh-keygen -t rsa -f svnharrykey.key&lt;/code&gt;&lt;li&gt;Enter a passphrase: &lt;span style="font-style: italic;"&gt;a secret key for private key encryption&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The key pair will be created in c:\cygwin\home\svnuse&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;If authorized_keys not exist (first time create):&lt;code style="font-size:100%;"&gt;$ cp svnharrykey.key.pub /home/svnuser/.ssh/authorized_keys&lt;/code&gt;If authorized_keys already exist:&lt;code style="font-size:100%;"&gt;$ cat svnharrykey.key.pub &gt;&gt; /home/svnuser/.ssh/authorized_keys&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Double-click on c:\cygwin\&lt;span style="font-weight: bold;"&gt;puttygen.exe&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Goto Conversions &gt; Import Key &gt; Select the svnharrykey.key file.&lt;/li&gt;&lt;li&gt;Enter the passphrase &gt; Save private key &gt; saved as svnharrykey.ppk (saved into the same folder).&lt;/li&gt;&lt;li&gt;Goto c:\cygwin\home\svnuser\.ssh and open “&lt;span style="font-weight: bold;"&gt;authorized_keys&lt;/span&gt;” file with WordPad.&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Append the following line (in blue &amp;amp; red) to the top of each authorized key:&lt;br /&gt;&lt;code  style="font-size:100%;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;command="svnserve -t -r &lt;span style="color: rgb(102, 0, 0);"&gt;d:/svn_repos/&lt;/span&gt; --tunnel-user=&lt;span style="color: rgb(102, 0, 0);"&gt;harry&lt;/span&gt;",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty&lt;/span&gt; ssh-rsa &amp;lt;ThePublicKey&amp;gt;&amp;lt;PublicKeyComment&amp;gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Replace the text in red to your svn repository root folder and svn authorized user (as in your svn repository conf\authz file).&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Note&lt;/span&gt;: If “svnserve” command cannot be found, change it to full path. E.g: &lt;code style="font-size:100%;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;command="c:/svnserve/bin/svnserve.exe –t –r d:/svn_repos/…&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Note&lt;/span&gt;: The user read/write right of the svn repository will follow as set in conf\authz. (conf\passwd will not be used)&lt;/li&gt;&lt;li&gt;Save the file.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Repeat steps above&lt;/span&gt; to generate keys for each svn authorized user.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Note&lt;/span&gt;: Recommended each svn user should have a different key pair and passphrase.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;After complete, copy all the &lt;span style="font-weight: bold;"&gt;.ppk keys&lt;/span&gt; in c:\cygwin\home\svnuser to another folder to be distributed to the clients.&lt;/li&gt;&lt;li&gt;In Windows, logout as svnuser, then login back as Administrator.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Distribute the Putty private key&lt;/span&gt; files (e.g. svnharrykey.ppk) created to the authorized clients.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To &lt;span style="font-weight: bold;"&gt;restrict access &lt;/span&gt;to the ssh service:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;In Windows, login as Administrator.&lt;/li&gt;&lt;li&gt;Open c:\cygwin\etc\hosts.allow with WordPad.&lt;/li&gt;&lt;li&gt;Put a hash (#) on this line:&lt;br /&gt;&lt;code style="font-size: 100%;"&gt;#sshd: ALL&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Put the following lines:&lt;br /&gt;&lt;code style="font-size: 100%;"&gt;ALL : PARANOID : deny&lt;br /&gt;ALL : PARANOID : RFC931 20 : deny&lt;br /&gt;ALL : localhost 127.0.0.1 : allow&lt;br /&gt;sshd : &lt;span style="color: rgb(51, 51, 255);"&gt;192.168.1.&lt;/span&gt; : allow&lt;br /&gt;sshd : &lt;span style="color: rgb(51, 51, 255);"&gt;218.208.999.99&lt;/span&gt;: allow&lt;br /&gt;…&lt;br /&gt;ALL : ALL : deny&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Note&lt;/span&gt;:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Replace the IPs in blue to those you allow.&lt;/li&gt;&lt;li&gt;Rules applies in the first-come-first-serve order.&lt;/li&gt;&lt;li&gt;To allow an IP range: sshd : 192.168.1. : allow&lt;/li&gt;&lt;li&gt;To allow a particular IP: sshd : 192.168.1.47: allow&lt;/li&gt;&lt;li&gt;To allow a domain: sshd : .mydomain.com : allow&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Save the file. The changes will take effect immediately.&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Part 2: Client Setup&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Copy or download &lt;span style="font-weight: bold;"&gt;PuTTY &lt;/span&gt;and &lt;span style="font-weight: bold;"&gt;Pageant&lt;/span&gt; (from &lt;a href="http://www.chiark.greenend.org.uk/%7Esgtatham/putty/download.html"&gt;here&lt;/a&gt;) and place the EXEs in any folder (e.g. d:\_svnuse)&lt;/li&gt;&lt;li&gt;Put the &lt;span style="font-weight: bold;"&gt;Putty private key&lt;/span&gt; (e.g. svnharrykey.ppk) into the same folder.&lt;/li&gt;&lt;li&gt;Double-click on &lt;span style="font-weight: bold;"&gt;putty.exe &lt;/span&gt;to &lt;span style="font-weight: bold;"&gt;create a new session&lt;/span&gt;:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Session:&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;HostName: Username @ Hostname/IP of the server (e.g. svnuser@myhost.com)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Protocol: SSH&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Saved Sessions: Any name (e.g. svnsession)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Connection: SSH:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Prefered SSH Protocol version: 2&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Go back to Session node, click save. Close the program.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;In the same folder, create a batch file named “&lt;span style="font-weight: bold;"&gt;runpageant.bat&lt;/span&gt;”, put the following line (&lt;span style="font-style: italic;"&gt;replace with your paths and private key name&lt;/span&gt;):&lt;br /&gt;&lt;code style="font-size: 100%;"&gt;start "Pageant" "d:\_svnuse\pageant.exe" d:\_svnuse\svnharrykey.ppk&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Create a &lt;span style="font-weight: bold;"&gt;shortcut &lt;/span&gt;of runpageant.bat and drag it into All Programs &gt; Startup.&lt;/li&gt;&lt;li&gt;When the runpageant.bat is executed, key in the &lt;span style="font-weight: bold;"&gt;passphrase &lt;/span&gt;when prompted.&lt;/li&gt;&lt;li&gt;Accessing svn repository via &lt;span style="font-weight: bold;"&gt;TortoiseSvn&lt;/span&gt;:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Using the address as below:&lt;/li&gt;&lt;ul&gt;&lt;li&gt; svn+ssh://svnsession/Repo_ProjectName/Trunk&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;span style="font-style: italic;font-size:90%;" &gt;Reference: File Version Used:&lt;br /&gt;Subversion (svn): 1.4.5&lt;br /&gt;TortoiseSVN: 1.4.8.12137 (win32)&lt;br /&gt;Cygwin: 1.5.25-14&lt;br /&gt;Putty, Puttygen, Pageant: 0.60&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Additional Resources:&lt;/b&gt;&lt;br&gt;&lt;a href="http://simpcode.blogspot.com/2011/10/subversion-post-commit-email.html"&gt;Subversion: Post-Commit Email Notification&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-1013695610687218234?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/1013695610687218234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2008/08/subversion-server-setting-up-svnserve.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/1013695610687218234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/1013695610687218234'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2008/08/subversion-server-setting-up-svnserve.html' title='Subversion: Server: Setting Up Svnserve With SSH'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-3826914388580715478</id><published>2008-07-17T18:26:00.021+08:00</published><updated>2011-10-13T19:55:39.588+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Subversion'/><title type='text'>Subversion: Server: Setting up Svnserve</title><content type='html'>Subversion (SVN) is a version control system that is gaining wide popularity. I've been using &lt;a href="http://tortoisesvn.net/"&gt;&lt;span style="font-weight: bold;"&gt;TortoiseSVN&lt;/span&gt;&lt;/a&gt; as the client, which is easy to use and setup. However, I find that setting up the Subversion server (&lt;span style="font-weight: bold;"&gt;svnserve &lt;/span&gt;based) is not that straight-forward (although not really that difficult as well).&lt;br /&gt;&lt;br /&gt;As such, based on my own experience, I've compiled a step-by-step guide to setup the svnserve based Subversion server, that could be useful for future use.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;Note&lt;/span&gt;&lt;/span&gt;: This topic is more like a &lt;span style="font-style: italic;"&gt;walk-through&lt;/span&gt; than a complete guidelines. And is basically based on the great documentations found on the &lt;a href="http://tortoisesvn.net/"&gt;TortoiseSVN website&lt;/a&gt; and various sources. You can refer the site for more explanation if needed.&lt;br /&gt;&lt;br /&gt;This topic is separated into 3 sections:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Server: Setting Up Svnserve&lt;/li&gt;&lt;li&gt;&lt;a href="http://simpcode.blogspot.com/2008/08/subversion-server-setting-up-svnserve.html"&gt;Server: Setting Up Svnserve With SSH&lt;/a&gt; &lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://simpcode.blogspot.com/2009/08/subversion-client-installation-and.html"&gt;Client: Installation and Guidelines&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;" &gt;Server: Setting Up Svnserve&lt;/span&gt;&lt;div style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Part 1: Installation&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Note&lt;/span&gt;: The following guide assumes the server's&lt;br /&gt;- svnserve is installed in &lt;span style="color: rgb(102, 0, 0);"&gt;c:\svnserve\&lt;/span&gt;&lt;br /&gt;- root folder for all repositories is in &lt;span style="color: rgb(102, 0, 0);"&gt;d:\svn_repos&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In Windows, login as Administrator.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Install SvnServe&lt;/span&gt; (get the latest version from &lt;a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91"&gt;here&lt;/a&gt;).&lt;/li&gt;&lt;ul&gt;&lt;li&gt;If manual install:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Manually create a folder &lt;span style="color: rgb(102, 0, 0);"&gt;c:\svnserve\&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Unzip and copy all the files/folders into the folder.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Run the SvnServe:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;If install as a service (automatically started when Windows starts): &lt;code style="font-size:100%;"&gt;sc create svnserve binpath= "&lt;span style="color: rgb(102, 0, 0);"&gt;c:\svnserve\bin\svnserve.exe&lt;/span&gt; --service --root &lt;span style="color: rgb(102, 0, 0);"&gt;d:\svn_repos\&lt;/span&gt;" displayname= "Subversion" depend= tcpip start=auto obj= "NT AUTHORITY\LocalService"&lt;/code&gt;&lt;/li&gt;&lt;li&gt;If manual run, create and run a batch file (e.g. svnserver_service.bat):&lt;code style="font-size:100%;"&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;c:\svnserve\bin\svnserve.exe&lt;/span&gt; --daemon --root &lt;span style="color: rgb(102, 0, 0);"&gt;d:\svn_repos\&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Install TortoiseSVN&lt;/span&gt; (get the latest version from &lt;a href="http://tortoisesvn.net/downloads"&gt;here&lt;/a&gt;).&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Optionally&lt;/span&gt;, after installed, right click &gt; Settings &gt; General&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Tick Use "_svn" instead of ".svn" directories&lt;/li&gt;&lt;li&gt;Tick Set fildates to the "last commit times"&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Create a &lt;span style="font-weight: bold;"&gt;root folder&lt;/span&gt; for all repositories in &lt;span style="color: rgb(102, 0, 0);"&gt;d:\svn_repos\&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Create a &lt;span style="font-weight: bold;"&gt;repository trunk folder&lt;/span&gt; for the relavant project inside the root folder. (&lt;span style="font-style: italic;"&gt;e.g. d:\svn_repos\Repo_Project1\Trunk&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;Right click on the folder and select TortoiseSVN -&gt; &lt;span style="font-weight: bold;"&gt;Create Repository&lt;/span&gt; here.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Choose Native Filesystem (FSFS)&lt;/li&gt;&lt;li&gt;Do NOT choose Berkeley DB, especially use on a network share.&lt;/li&gt;&lt;li&gt;Do NOT modify the contents of the repository folder yourself.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Authentication &lt;/span&gt;(modify and save with a Notepad): &lt;/li&gt;&lt;ul&gt;&lt;li&gt;Modify the '&lt;span style="font-weight: bold;"&gt;svnserve.conf&lt;/span&gt;' file in the repository 'conf' folder (&lt;span style="font-style: italic;"&gt;e.g. d:\svn_repos\Repo_Project1\Trunk\conf&lt;/span&gt;).&lt;/li&gt;&lt;li&gt;Paste the following after the last line:&lt;br /&gt;&lt;code style="font-size:100%;"&gt;anon-access = none&lt;br /&gt;auth-access = write&lt;br /&gt;password-db = passwd&lt;br /&gt;authz-db = authz&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Modify the 'passwd' file in the same folder to set user name and password.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Put your user-password pair after the last line. E.g.:&lt;br /&gt;&lt;code style="font-size:100%;"&gt;harry = harrypassword&lt;br /&gt;user1 = user1password&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Modify the 'authz' file in the same folder to set the path-based access control:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Put your user-authorize pair after the last line (&lt;span style="font-style: italic;"&gt;r = read, w= write&lt;/span&gt;). E.g.:&lt;br /&gt;&lt;code style="font-size:100%;"&gt;[/]&lt;br /&gt;harry = rw&lt;br /&gt;user1 = r&lt;br /&gt;* =&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Test (make sure the svnserve service is running): Anywhere in Windows Explorer, right click &gt; TortoiseSVN &gt; Repo-Browser to view a repository (&lt;span style="font-style: italic;"&gt;e.g. svn://localhost/Repo_Project1/Trunk&lt;/span&gt;). Type the username and password when prompted.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Optional&lt;/span&gt;: To create a backup copy of the repository: &lt;/li&gt;&lt;ul&gt;&lt;li&gt;In DOS prompt, type: &lt;code style="font-size:100%;"&gt;svnadmin hotcopy path/to/repository path/to/backup --clean-logs&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Optional&lt;/span&gt;: Setup SvnServe using &lt;span style="font-weight: bold;"&gt;SSH&lt;/span&gt;. Refer the &lt;span style="font-weight: bold;"&gt;&lt;a href="http://simpcode.blogspot.com/2008/08/subversion-server-setting-up-svnserve.html"&gt;Setting up Svnserve with SSH&lt;/a&gt;&lt;/span&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:90%;"&gt;&lt;span style="font-style: italic;"&gt;Reference source: &lt;a href="http://http//tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-serversetup-svnserve.html"&gt;http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-serversetup-svnserve.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Part 2: Repository Layout&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The repository basic folder structure can be created by:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Creating an empty folder with the folder structure inside, then TortoiseSVN &gt; Import, or&lt;/li&gt;&lt;li&gt;Using TortoiseSVN repository browser&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;It is recommended to create separate repositories for 'each' project. This allows independent development and to keep track on the repository's revision number.&lt;/li&gt;&lt;li&gt;The recommended &lt;span style="font-weight: bold;"&gt;directory structure&lt;/span&gt;:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;trunk : To hold the "main line" of development&lt;/li&gt;&lt;li&gt;branches : Contain branch copies&lt;/li&gt;&lt;li&gt;tags  : Contain tags copies&lt;/li&gt;&lt;li&gt;For details, refer &lt;a href="http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-branchtag.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;span style="font-style: italic;font-size:90%;" &gt;Reference source: &lt;a href="http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-import.html"&gt;http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-import.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Reference: File Version Used:&lt;br /&gt;Subversion (svn): 1.4.5&lt;br /&gt;TortoiseSVN: 1.4.8.12137 (win32)&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Additional Resources:&lt;/b&gt;&lt;br&gt;&lt;a href="http://simpcode.blogspot.com/2011/10/subversion-post-commit-email.html"&gt;Subversion: Post-Commit Email Notification&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-3826914388580715478?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/3826914388580715478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2008/07/subversion-server-setting-up-svnserve.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/3826914388580715478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/3826914388580715478'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2008/07/subversion-server-setting-up-svnserve.html' title='Subversion: Server: Setting up Svnserve'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-2998162518368735000</id><published>2008-07-15T18:47:00.014+08:00</published><updated>2011-09-29T12:43:25.361+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>C#: Set And Unset Auto-start For Windows Application</title><content type='html'>I found this useful C# class in &lt;a href="http://forums.msdn.microsoft.com/it-IT/csharpgeneral/thread/fc988cc2-1714-4a17-9ed0-16aac33f5f1f/"&gt;this MSDN forum&lt;/a&gt; that provides an easy way to enable and disable an application auto-run in Windows.&lt;br /&gt;&lt;br /&gt;With a little modification, I made it to be easily called by any project. What you need to do is just pass in the '&lt;span style="font-weight:bold;"&gt;Key Name&lt;/span&gt;' and '&lt;span style="font-weight:bold;"&gt;Assembly Location&lt;/span&gt;' parameters.&lt;br /&gt;&lt;br /&gt;Here is the complete class:&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;&lt;div&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Win32;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// Utility.&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Util&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;const&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; RUN_LOCATION = &lt;span class="str"&gt;@"Software\Microsoft\Windows\CurrentVersion\Run"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// Sets the autostart value for the assembly.&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name="keyName"&amp;gt;Registry Key Name&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name="assemblyLocation"&amp;gt;Assembly location (e.g. Assembly.GetExecutingAssembly().Location)&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetAutoStart(&lt;span class="kwrd"&gt;string&lt;/span&gt; keyName, &lt;span class="kwrd"&gt;string&lt;/span&gt; assemblyLocation)&lt;br /&gt;    {&lt;br /&gt;        RegistryKey key = Registry.CurrentUser.CreateSubKey(RUN_LOCATION);&lt;br /&gt;        key.SetValue(keyName, assemblyLocation);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// Returns whether auto start is enabled.&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name="keyName"&amp;gt;Registry Key Name&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name="assemblyLocation"&amp;gt;Assembly location (e.g. Assembly.GetExecutingAssembly().Location)&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsAutoStartEnabled(&lt;span class="kwrd"&gt;string&lt;/span&gt; keyName, &lt;span class="kwrd"&gt;string&lt;/span&gt; assemblyLocation)&lt;br /&gt;    {&lt;br /&gt;        RegistryKey key = Registry.CurrentUser.OpenSubKey(RUN_LOCATION);&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (key == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt; = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)key.GetValue(keyName);&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt; == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br /&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt; == assemblyLocation);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// Unsets the autostart value for the assembly.&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name="keyName"&amp;gt;Registry Key Name&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; UnSetAutoStart(&lt;span class="kwrd"&gt;string&lt;/span&gt; keyName)&lt;br /&gt;    {&lt;br /&gt;        RegistryKey key = Registry.CurrentUser.CreateSubKey(RUN_LOCATION);&lt;br /&gt;        key.DeleteValue(keyName);&lt;br /&gt;    }&lt;br /&gt;}&lt;/div&gt;&lt;/pre&gt;Sample Usage:&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; keyName = &lt;span class="str"&gt;"MyProgramName"&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; assemblyLocation = Assembly.GetExecutingAssembly().Location;  &lt;span class="rem"&gt;// Or the EXE path.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Set Auto-start.&lt;/span&gt;&lt;br /&gt;Util.SetAutoStart(keyName, assemblyLocation);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Unset Auto-start.&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (Util.IsAutoStartEnabled(keyName, assemblyLocation))&lt;br /&gt;    Util.UnSetAutoStart(keyName);&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-2998162518368735000?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/2998162518368735000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2008/07/c-set-and-unset-auto-start-for-windows.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/2998162518368735000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/2998162518368735000'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2008/07/c-set-and-unset-auto-start-for-windows.html' title='C#: Set And Unset Auto-start For Windows Application'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-6182378074584180255</id><published>2008-07-12T14:36:00.012+08:00</published><updated>2008-07-15T18:46:11.110+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>C#: Get A Unique Random String Using GUID Hash Code</title><content type='html'>GUID, also known as Globally Unique Identifier, is an 128-bit integer (16 bytes) that can be used to uniquely identify a record in the database (other than the auto-increase number). It is best used as a primary key as well.&lt;br /&gt;&lt;br /&gt;But in some occasion, what you need is not really a GUID, but a random string that is "unique enough" to be used by your system. And you might want to store it as a string in your database (for whatever reason).&lt;br /&gt;&lt;br /&gt;In C#, you can do this by using the GUID hash code. Here is the function that returns a "unique enough" string with a desired length:&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// Gets a unqiue key based on GUID string hash code.&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;param name="length"&amp;gt;The length of the key returned.&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;Unique key returned.&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetUniqueKey(&lt;span class="kwrd"&gt;int&lt;/span&gt; length)&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; guidResult = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;    &lt;br /&gt;    &lt;span class="kwrd"&gt;while&lt;/span&gt; (guidResult.Length &amp;lt; length)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="rem"&gt;// Get the GUID.&lt;/span&gt;&lt;br /&gt;        guidResult += Guid.NewGuid().ToString().GetHashCode().ToString(&lt;span class="str"&gt;"x"&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;// Make sure length is valid.&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (length &amp;lt;= 0 || length &amp;gt; guidResult.Length)&lt;br /&gt;        &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentException(&lt;span class="str"&gt;"Length must be between 1 and "&lt;/span&gt; + guidResult.Length);&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;// Return the first length bytes.&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; guidResult.Substring(0, length);&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-6182378074584180255?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/6182378074584180255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2008/07/c-get-unique-key-using-guid-hash-code.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/6182378074584180255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/6182378074584180255'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2008/07/c-get-unique-key-using-guid-hash-code.html' title='C#: Get A Unique Random String Using GUID Hash Code'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-5307075813390726975</id><published>2008-07-12T11:55:00.014+08:00</published><updated>2008-07-12T15:43:41.479+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>Replace Certain Data In All FoxPro tables</title><content type='html'>The data in our database might need to be changed once in a while, due to business requirement or human error. For example, a field named lot_code (to store the Lot Code of a manufacturing plant) might need to be changed from 'LT001' to 'LOT001'. But this code has been widely used within your system and is stored in several tables.&lt;br /&gt;&lt;br /&gt;In Visual FoxPro, one of the method to solve this is:&lt;br /&gt;&lt;br /&gt;1. Select the table&lt;br /&gt;2. Set to an appropriate index&lt;br /&gt;3. Seek and replace the field data in a loop&lt;br /&gt;4. Repeat steps 1 to 3 for other affected tables&lt;br /&gt;&lt;br /&gt;But, with this method, you have to be sure not to miss out any fields and tables, or else your transaction's data or reports might produce incorrect results.&lt;br /&gt;&lt;br /&gt;To avoid that, here is another method, which scans through all the tables for the affected field(s) and replaces the old value with a new one:&lt;br /&gt;&lt;code class="fixheight"&gt;***********************************************************************************&lt;br /&gt;** Program: changefield.prg&lt;br /&gt;** Purpose: Check and replace selected field value in all tables.&lt;br /&gt;** Usage  : DO changefield WITH cFields, cOldValue, cNewValue, cDataPath, lExecute&lt;br /&gt;***********************************************************************************&lt;br /&gt;&lt;br /&gt;LPARA In_cFields, In_cOldValue, In_cNewValue, In_cDataPath, In_lExecute&lt;br /&gt;&lt;br /&gt;IF TYPE('In_cFields') &lt;&gt; 'C' .OR. TYPE('In_cOldValue') &lt;&gt; 'C' .OR. TYPE('In_cNewValue') &lt;&gt; 'C'&lt;br /&gt;    =MESSAGEBOX('Location fields information not provided.')&lt;br /&gt;    RETURN&lt;br /&gt;ENDIF&lt;br /&gt;&lt;br /&gt;In_cFields   = "," + ALLTR(LOWER(In_cFields)) + ","&lt;br /&gt;In_cOldValue = ALLTR(In_cOldValue)&lt;br /&gt;In_cNewValue = ALLTR(In_cNewValue)&lt;br /&gt;&lt;br /&gt;IF TYPE('In_cDataPath') &lt;&gt; 'C'&lt;br /&gt;    In_cDataPath = ''&lt;br /&gt;ELSE&lt;br /&gt;    In_cDataPath = ADDBS(In_cDataPath)&lt;br /&gt;    SET DEFA TO &amp;In_cDataPath&lt;br /&gt;ENDIF&lt;br /&gt;&lt;br /&gt;CLOSE DATA&lt;br /&gt;&lt;br /&gt;STORE SET("CONSOLE")  TO mOriConsole&lt;br /&gt;STORE SET("CPDIALOG") TO mOriCpDialog&lt;br /&gt;SET CPDIALOG OFF        &amp;&amp; Prevent Code Page prompt if no code page (same as hit esc).&lt;br /&gt;&lt;br /&gt;IF FILE("_script.PRG")&lt;br /&gt;    ERASE("_script.PRG")&lt;br /&gt;ENDIF&lt;br /&gt;&lt;br /&gt;SET PRINTER TO "_script.PRG" ADDITIVE&lt;br /&gt;SET PRINTER ON&lt;br /&gt;SET CONSOLE OFF&lt;br /&gt;&lt;br /&gt;lnFiles = ADIR(gaDatabase, '*.dbf')&lt;br /&gt;FOR nCount = 1 TO lnFiles                   &amp;&amp; Loop for number of databases.&lt;br /&gt;    lcFile = ALLTR(LOWER(gaDatabase(nCount,1)))&lt;br /&gt; &lt;br /&gt;    WAIT WINDOWS "Table " + ALLTR(STR(nCount)) + " of " + ALLTR(STR(lnFiles)) + " : " + lcFile NOWAIT&lt;br /&gt;&lt;br /&gt;    SELE 0&lt;br /&gt; &lt;br /&gt;    _mOriError2 = ON('ERROR')&lt;br /&gt;    mErrRetry2  = .F.&lt;br /&gt;    mErrSkip    = .F.&lt;br /&gt;    ON ERROR STORE .T. TO mErrRetry2        &amp;&amp; Retry to open file if error (happen when CDX file not found). Open again will remove the CDX reference.&lt;br /&gt;   &lt;br /&gt;    USE &amp;lcFile&lt;br /&gt; &lt;br /&gt;    IF mErrRetry2&lt;br /&gt;        ON ERROR STORE .T. TO mErrSkip      &amp;&amp; Skip the file if still error (happen when file corrupt, etc).&lt;br /&gt;        USE &amp;lcFile&lt;br /&gt;    ENDIF&lt;br /&gt; &lt;br /&gt;    ON ERROR &amp;_mOriError2&lt;br /&gt; &lt;br /&gt;    IF !mErrSkip&lt;br /&gt;        ** Get the loc field and prepare the REPL statement.&lt;br /&gt;        PRIVATE lcReplCommand&lt;br /&gt;        lcReplCommand = ''&lt;br /&gt;&lt;br /&gt;        FOR mFieldCount = 1 TO AFIELDS(aDbfField)                  &amp;&amp; Get field in each dbf file.&lt;br /&gt;            mFieldName  = LOWER(ALLTR(aDbfField(mFieldCount,1)))   &amp;&amp; Get field name.&lt;br /&gt;            mFieldType  = UPPER(ALLTR(aDbfField(mFieldCount,2)))   &amp;&amp; Get field type.&lt;br /&gt;&lt;br /&gt;            IF "," + mFieldName + "," $ In_cFields .AND. mFieldType == 'C'&lt;br /&gt;                IF !EMPTY(lcReplCommand)&lt;br /&gt;                    lcReplCommand = lcReplCommand + CHR(13)&lt;br /&gt;                ENDIF&lt;br /&gt;    &lt;br /&gt;                lcReplCommand = lcReplCommand + ;&lt;br /&gt;                    'REPL ALL ' + mFieldName + ' WITH In_cNewValue FOR ALLTR(' + mFieldName + ') == ALLTR(In_cOldValue)'&lt;br /&gt;            ENDIF&lt;br /&gt;        ENDFOR&lt;br /&gt;        USE&lt;br /&gt;        **&lt;br /&gt;&lt;br /&gt;        ** Run each REPL statement for current table.&lt;br /&gt;        IF !EMPTY(ALLTR(lcReplCommand))&lt;br /&gt;            IF In_lExecute&lt;br /&gt;                USE &amp;lcFile&lt;br /&gt;            ELSE&lt;br /&gt;                ? 'USE ' + lcFile&lt;br /&gt;            ENDIF&lt;br /&gt;    &lt;br /&gt;            lnReplTotal = ALINES(aReplCommand, lcReplCommand, .T.)&lt;br /&gt;            FOR lnReplCount = 1 TO lnReplTotal&lt;br /&gt;                mReplCommand = aReplCommand(lnReplCount)&lt;br /&gt;    &lt;br /&gt;                IF In_lExecute&lt;br /&gt;                    &amp;mReplCommand&lt;br /&gt;                ELSE&lt;br /&gt;                    ? mReplCommand&lt;br /&gt;                ENDIF&lt;br /&gt;            ENDFOR&lt;br /&gt;        ENDIF&lt;br /&gt;        USE&lt;br /&gt;        **&lt;br /&gt;    ENDIF&lt;br /&gt;ENDFOR&lt;br /&gt;&lt;br /&gt;CLOSE DATA&lt;br /&gt;WAIT CLEAR&lt;br /&gt;&lt;br /&gt;RELEASE gaDatabase&lt;br /&gt;&lt;br /&gt;SET CONSOLE &amp;mOriConsole&lt;br /&gt;SET PRINTER OFF&lt;br /&gt;SET PRINTER TO&lt;br /&gt;&lt;br /&gt;SET CPDIALOG &amp;mOriCpDialog&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Explanation:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;cFields&lt;/span&gt;: Accepts multiple fields, separated by comma. This will be useful if there are several fields which store the same content.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;lExecute&lt;/span&gt;: If true, it directly replaces the data. If false, it just generates the update script (_script.PRG) without affecting the data. The script will be saved in the cDataPath given.&lt;br /&gt;&lt;br /&gt;Here is a sample usage on changing the "lot_code" field from 'LT001' to 'LOT001':&lt;br /&gt;&lt;code&gt;DO changefield WITH 'lot_code', 'LT001', 'LOT001','d:\mysystem\data',.T.&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-5307075813390726975?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/5307075813390726975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2008/07/replace-certain-data-in-all-foxpro.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/5307075813390726975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/5307075813390726975'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2008/07/replace-certain-data-in-all-foxpro.html' title='Replace Certain Data In All FoxPro tables'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-8328990419041469703</id><published>2008-07-01T18:00:00.006+08:00</published><updated>2008-07-12T13:59:31.786+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro'/><title type='text'>FoxPro To Run External Application</title><content type='html'>In Visual FoxPro, the best way to run an external application is by using the &lt;span style="font-weight:bold;"&gt;ShellExecute()&lt;/span&gt; API function.&lt;br /&gt;&lt;br /&gt;For the complete explanation on the ShellExecute() function, please refer to this Foxite's &lt;a href="http://www.foxite.com/articles/read.aspx?id=60&amp;document=introducing-shellexecute"&gt;article&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;To make things easy, I put all the codes into a program PRG. Whenever I need to call an external application, I just run this procedure.&lt;br /&gt;&lt;br /&gt;&lt;code class="fixheight"&gt;********************************************************************&lt;br /&gt;* Program: runexapp.prg&lt;br /&gt;* Purpose: Procedure to execute an external application, with parameters.&lt;br /&gt;* Usahe  : DO runexapp WITH &amp;lt;cApplication&amp;gt;, &amp;lt;cParameters&amp;gt;&lt;br /&gt;********************************************************************&lt;br /&gt;&lt;br /&gt;PARAMETERS In_App, In_Params&lt;br /&gt;&lt;br /&gt;IF TYPE("In_Params") &lt;&gt; "C"&lt;br /&gt;    In_Params = ""&lt;br /&gt;ENDIF&lt;br /&gt;&lt;br /&gt;** Declare API function (only need to declare once in main.prg).&lt;br /&gt;DECLARE INTEGER ShellExecute IN shell32.DLL ;&lt;br /&gt;    INTEGER hndWin, ;&lt;br /&gt;    STRING cAction, ;&lt;br /&gt;    STRING cFileName, ;&lt;br /&gt;    STRING cParams, ;&lt;br /&gt;    STRING cDir, ;&lt;br /&gt;    INTEGER nShowWin&lt;br /&gt;**&lt;br /&gt;&lt;br /&gt;cAction   = "open"&lt;br /&gt;cFileName = In_App&lt;br /&gt;cParams   = In_Params&lt;br /&gt;cPath     = ""&lt;br /&gt;&lt;br /&gt;mRtn      = ShellExecute(0,cAction,cFileName,cParams,cPath,1)&lt;br /&gt;&lt;br /&gt;** Extra checking.&lt;br /&gt;DO CASE&lt;br /&gt;    CASE mRtn = 2&lt;br /&gt;        mMsg = "Bad Association"&lt;br /&gt;    CASE mRtn = 29&lt;br /&gt;        mMsg = "Failure to load application"&lt;br /&gt;    CASE mRtn = 30&lt;br /&gt;        mMsg = "Application is busy"&lt;br /&gt;    CASE mRtn = 31&lt;br /&gt;        mMsg = "No application association"&lt;br /&gt;    OTHERWISE&lt;br /&gt;        mMsg = ""&lt;br /&gt;ENDCASE&lt;br /&gt;&lt;br /&gt;IF !EMPTY(mMsg)&lt;br /&gt;    MESSAGEBOX(mMsg,48,"Error")&lt;br /&gt;ENDIF&lt;br /&gt;&lt;br /&gt;CLEAR DLLS ShellExecute&lt;br /&gt;**&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;To use the procedure, just put a single line in your program:&lt;br /&gt;&lt;code&gt;DO runexapp WITH 'c:\program\someapp.exe'&lt;/code&gt;&lt;br /&gt;You can pass the optional parameters as the second arguments if needed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-8328990419041469703?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/8328990419041469703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2008/07/foxpro-to-run-external-application.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/8328990419041469703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/8328990419041469703'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2008/07/foxpro-to-run-external-application.html' title='FoxPro To Run External Application'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-4860890040078586999</id><published>2008-06-30T19:04:00.012+08:00</published><updated>2008-12-10T00:28:18.686+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro'/><title type='text'>Visual FoxPro 6 Right-click Shortcut</title><content type='html'>Right-click shortcut menu in a TextBox control is a norm in many programming languages. But, if you happen to be working in Visual FoxPro 6, it is not that easy.&lt;br /&gt;&lt;br /&gt;Here is the way to make the shortcut I found somewhere (which I've lost the reference), that provides the &lt;span style="font-weight:bold;"&gt;Cut, Copy and Paste&lt;/span&gt; functions. The functions will be enabled or disabled depends on is there any characters selected:&lt;br /&gt;&lt;br /&gt;Create a &lt;span style="font-weight:bold;"&gt;shortcut.prg&lt;/span&gt; as the following:&lt;br /&gt;&lt;code class="fixheight"&gt;LPARAMETERS In_SelLength,In_Row,In_Col&lt;br /&gt;&lt;br /&gt;DEFINE POPUP shortcut SHORTCUT RELATIVE FROM In_Row,In_Col TO In_Row+3.5,In_Col+20&lt;br /&gt;&lt;br /&gt;*DEFINE BAR _med_undo OF shortcut PROMPT "\&amp;lt;Undo" ;&lt;br /&gt;*    KEY CTRL+Z, "Ctrl+Z" ;&lt;br /&gt;*    MESSAGE "Undoes the last command or action"&lt;br /&gt;&lt;br /&gt;*DEFINE BAR 2 OF shortcut PROMPT "\-"&lt;br /&gt;&lt;br /&gt;If In_SelLength &gt; 0&lt;br /&gt;    DEFINE BAR _med_cut OF shortcut PROMPT "Cu\&amp;lt;t" ;&lt;br /&gt;        KEY CTRL+X, "Ctrl+X" ;&lt;br /&gt;        MESSAGE "Removes the selection and places it onto the Clipboard"&lt;br /&gt;&lt;br /&gt;    DEFINE BAR _med_copy OF shortcut PROMPT "\&amp;lt;Copy" ;&lt;br /&gt;        KEY CTRL+C, "Ctrl+C" ;&lt;br /&gt;        MESSAGE "Copies the selection onto the Clipboard"&lt;br /&gt;ELSE&lt;br /&gt;    DEFINE BAR _med_cut OF shortcut PROMPT "\Cut" ;&lt;br /&gt;        KEY CTRL+X, "Ctrl+X" ;&lt;br /&gt;        MESSAGE "Removes the selection and places it onto the Clipboard"&lt;br /&gt;&lt;br /&gt;    DEFINE BAR _med_copy OF shortcut PROMPT "\Copy" ;&lt;br /&gt;        KEY CTRL+C, "Ctrl+C" ;&lt;br /&gt;        MESSAGE "Copies the selection onto the Clipboard"&lt;br /&gt;ENDIF&lt;br /&gt;&lt;br /&gt;IF LEN(_CLIPTEXT) &gt; 0&lt;br /&gt;    DEFINE BAR _med_paste OF shortcut PROMPT "\&amp;lt;Paste" ;&lt;br /&gt;        KEY CTRL+V, "Ctrl+V" ;&lt;br /&gt;        MESSAGE "Pastes the contents of the Clipboard"&lt;br /&gt;ELSE&lt;br /&gt;    DEFINE BAR _med_paste OF shortcut PROMPT "\Paste" ;&lt;br /&gt;        KEY CTRL+V, "Ctrl+V" ;&lt;br /&gt;        MESSAGE "Pastes the contents of the Clipboard"&lt;br /&gt;ENDIF&lt;br /&gt;&lt;br /&gt;ACTIVATE POPUP shortcut&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Then in your form's TextBox &lt;span style="font-weight:bold;"&gt;KeyPress&lt;/span&gt; event, put this in:&lt;br /&gt;&lt;code&gt;LPARAMETERS nKeyCode, nShiftAltCtrl&lt;br /&gt;&lt;br /&gt;IF nKeyCode = 93&lt;br /&gt;    THISFORM.SCALEMODE = 0&lt;br /&gt;    DO shortcut WITH THIS.SELLENGTH,THIS.HEIGHT / 2 + THIS.TOP,THIS.WIDTH / 2 + THIS.LEFT&lt;br /&gt;    THISFORM.SCALEMODE = 3&lt;br /&gt;    THIS.VALUE = STR(THISFORM.SCALEMODE)&lt;br /&gt;ENDIF&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;In the same TextBox &lt;span style="font-weight:bold;"&gt;RightClick&lt;/span&gt; event, put this in:&lt;br /&gt;&lt;code&gt;DO shortcut WITH THIS.SELLENGTH,MROW(),MCOL()&lt;/code&gt;&lt;br /&gt;Now when you run your form, a right-click menu will pop-up:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oUETbCQaMHU/SGjN82938xI/AAAAAAAAAB4/wyp9xm2SOjg/s1600-h/FoxProShotcut1.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_oUETbCQaMHU/SGjN82938xI/AAAAAAAAAB4/wyp9xm2SOjg/s320/FoxProShotcut1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5217646613739598610" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-4860890040078586999?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/4860890040078586999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2008/06/visual-foxpro-6-right-click-shortcut.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/4860890040078586999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/4860890040078586999'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2008/06/visual-foxpro-6-right-click-shortcut.html' title='Visual FoxPro 6 Right-click Shortcut'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oUETbCQaMHU/SGjN82938xI/AAAAAAAAAB4/wyp9xm2SOjg/s72-c/FoxProShotcut1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-4134305164945367506</id><published>2008-06-26T18:43:00.041+08:00</published><updated>2008-07-12T14:00:28.556+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro'/><title type='text'>Fast Replace Fields In All FoxPro Report Formats</title><content type='html'>I've always found the Visual FoxPro report format as one of the best reporting tools around. It is easy and fast to develop, and there are seldom connection or linking issues (read: Crystal Report).&lt;br /&gt;But of course, it only binds to the FoxPro database. :)&lt;br /&gt;&lt;br /&gt;One of the amazing things is that the report can actually be processed as a data table. You can manipulate the report contents as if working with a table, as long as you know what you're doing.&lt;br /&gt;&lt;br /&gt;For instance, if there are certain fields' expression in the report format that need to be changed, and it happens that you also need to change the same thing for 100 over reports, here is a faster way to do:&lt;br /&gt;&lt;br /&gt;Create a small procedure that will loop through all the reports, and modify the field expression contents for each:&lt;br /&gt;&lt;code class="fixheight"&gt;&lt;br /&gt;***************************************************************&lt;br /&gt;* Program: rptchgfield.prg&lt;br /&gt;* Purpose: Replaces old field expression with new expression in all reports.&lt;br /&gt;* Usage  : DO rptchgfield WITH cReportPath, cOldField, cNewField&lt;br /&gt;***************************************************************&lt;br /&gt;&lt;br /&gt;LPARA In_lcReportPath, In_lcOldField, In_lcNewField&lt;br /&gt;&lt;br /&gt;In_lcReportPath = ADDBS(ALLTR(In_lcReportPath))&lt;br /&gt;In_lcOldField   = ALLTR(UPPER(In_lcOldField))&lt;br /&gt;In_lcNewField   = ALLTR(In_lcNewField)&lt;br /&gt;&lt;br /&gt;lnFiles         = ADIR(laDatabase, In_lcReportPath + '*.frx')  &amp;&amp; Get all files into an array.&lt;br /&gt;&lt;br /&gt;FOR lnCount = 1 TO lnFiles              &amp;&amp; Loop for each tables (report format).&lt;br /&gt;    lcFile   = laDatabase(lnCount,1)    &amp;&amp; Row, Column = 1, file names.&lt;br /&gt; &lt;br /&gt;    lcReport = In_lcReportPath + lcFile&lt;br /&gt;  &lt;br /&gt;    USE &amp;lcReport&lt;br /&gt;    GO TOP&lt;br /&gt;    DO WHILE !EOF()&lt;br /&gt;        IF In_lcOldField $ UPPER(expr)     &amp;&amp; Check the field expression that matched.&lt;br /&gt;            lcExpress = UPPER(expr)&lt;br /&gt;            lnStart   = AT(In_lcOldField, lcExpress)&lt;br /&gt;            lnReplace = LEN(In_lcOldField)&lt;br /&gt;&lt;br /&gt;            REPL expr WITH STUFF(lcExpress,lnStart,lnReplace,In_lcNewField) &amp;&amp; Replace with the new expression.&lt;br /&gt;        ENDIF&lt;br /&gt;&lt;br /&gt;        SKIP&lt;br /&gt;    ENDDO&lt;br /&gt;ENDFOR&lt;br /&gt;&lt;br /&gt;CLOSE DATABASE&lt;br /&gt;RELEASE laDatabase&lt;br /&gt;&lt;br /&gt;=MESSAGEBOX("Process Complete.")&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Run the procedure with command like:&lt;br /&gt;&lt;code&gt;DO rptchgfield WITH "d:\reports\", "phone1", "off_phone"&lt;/code&gt;&lt;br /&gt;After completed, all the reports in d:\reports\ with field expression "phone1" will be converted to "off_phone".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-4134305164945367506?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/4134305164945367506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2008/06/fast-replace-fields-in-all-foxpro.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/4134305164945367506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/4134305164945367506'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2008/06/fast-replace-fields-in-all-foxpro.html' title='Fast Replace Fields In All FoxPro Report Formats'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7592335279592023378.post-5201236376167801046</id><published>2008-06-25T19:00:00.014+08:00</published><updated>2008-12-10T00:28:19.174+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>Using MySQL Workbench To Generate Structure Differences</title><content type='html'>As part of the database maintenance and deployment processes, there are always cases where you need to get the differences between the current (legacy) structure used by your customer, and the latest structures.&lt;br /&gt;&lt;br /&gt;A fast and easy way to do this is by using the &lt;a href="http://dev.mysql.com/workbench/"&gt;MySQL Workbench&lt;/a&gt;. The following are the steps (based on version 5.0.22):&lt;br /&gt;&lt;br /&gt;1. &lt;span style="font-weight: bold;"&gt;Get the scripts&lt;/span&gt; of the databases that need to be compared.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(102, 102, 102);"&gt;- I have an example here with two sql scripts, mydb_old.sql and mydb_new.sql. These two have near identical structures (with same database name), except some changes in the mydb_new, where:&lt;/span&gt;&lt;br /&gt;&lt;code&gt;customer table: added an address field of type TEXT&lt;br /&gt;supplier table: altered the phone field to length 100&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;2. Run Workbench. Close any &lt;span style="font-weight: bold;"&gt;Physical Schemata&lt;/span&gt; if any (e.g. the 'mysql' database) : Right click on the icon, then select 'Delete'.&lt;br /&gt;&lt;br /&gt;3. Goto File &gt; Import &gt; &lt;span style="font-weight: bold;"&gt;Reverse Engineer MySQL Create Script&lt;/span&gt; ...&lt;br /&gt;- Input File : Select the &lt;span style="font-weight: bold;"&gt;new data structure script&lt;/span&gt; file (mydb_new.sql), click &lt;span style="font-weight: bold;"&gt;Next&lt;/span&gt;;&lt;br /&gt;- If the script has no error, the progress will show 'Execution completed successfully', click &lt;span style="font-weight: bold;"&gt;Next&lt;/span&gt;;&lt;br /&gt;- 'Autoplace objects in new diagram' left untick if not needed. Click &lt;span style="font-weight: bold;"&gt;Finish&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;4. Now the Physical Schemata will show the database structure that was imported.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oUETbCQaMHU/SGIvF3xGH4I/AAAAAAAAABg/2fQ6UP4a1w8/s1600-h/Workbench_Import1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_oUETbCQaMHU/SGIvF3xGH4I/AAAAAAAAABg/2fQ6UP4a1w8/s320/Workbench_Import1.JPG" alt="" id="BLOGGER_PHOTO_ID_5215783096364179330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;5. Goto File &gt; Export &gt; &lt;span style="font-weight: bold;"&gt;Forward Engineer SQL Alter Script&lt;/span&gt; ...&lt;br /&gt;- Input File : Select the &lt;span style="font-weight: bold;"&gt;old data structure script&lt;/span&gt; file (mydb_old.sql), click &lt;span style="font-weight: bold;"&gt;Next&lt;/span&gt;;&lt;br /&gt;- After the process is completed, an '&lt;span style="font-weight: bold;"&gt;SQL Diff Tree&lt;/span&gt;' screen will show the differences between the two database schema.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oUETbCQaMHU/SGIv30vBYmI/AAAAAAAAABo/jdPj89qY2QA/s1600-h/Workbench_Export1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_oUETbCQaMHU/SGIv30vBYmI/AAAAAAAAABo/jdPj89qY2QA/s320/Workbench_Export1.JPG" alt="" id="BLOGGER_PHOTO_ID_5215783954543632994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;6. Click &lt;span style="font-weight: bold;"&gt;Next&lt;/span&gt;. Now you will see the update script for your database schema. Review the generated script, save the script to a file.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oUETbCQaMHU/SGIwBqSKCcI/AAAAAAAAABw/B4VqpXzBP7U/s1600-h/Workbench_Export2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_oUETbCQaMHU/SGIwBqSKCcI/AAAAAAAAABw/B4VqpXzBP7U/s320/Workbench_Export2.JPG" alt="" id="BLOGGER_PHOTO_ID_5215784123536902594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;7. Exit the Workbench program. Do not save if prompt.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic; color: rgb(0, 0, 0);"&gt;Note:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;- Both scripts must have the same database name.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;- Remember to always '&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Import&lt;/span&gt;&lt;span style="font-style: italic;"&gt;' the&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; new script&lt;/span&gt;&lt;span style="font-style: italic;"&gt; first, then '&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Export&lt;/span&gt;&lt;span style="font-style: italic;"&gt;' with the &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;old script&lt;/span&gt;&lt;span style="font-style: italic;"&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7592335279592023378-5201236376167801046?l=simpcode.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://simpcode.blogspot.com/feeds/5201236376167801046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://simpcode.blogspot.com/2008/06/using-mysql-workbench-to-generate.html#comment-form' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/5201236376167801046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7592335279592023378/posts/default/5201236376167801046'/><link rel='alternate' type='text/html' href='http://simpcode.blogspot.com/2008/06/using-mysql-workbench-to-generate.html' title='Using MySQL Workbench To Generate Structure Differences'/><author><name>Weizh</name><uri>http://www.blogger.com/profile/11075113082435187291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oUETbCQaMHU/SGIvF3xGH4I/AAAAAAAAABg/2fQ6UP4a1w8/s72-c/Workbench_Import1.JPG' height='72' width='72'/><thr:total>7</thr:total></entry></feed>
