解惑

解己之惑,解人之惑

标签:Windows

Windows断点续传

IT的世界,角落里面永远有我们想有还真有的功能,今天就是复制一个大文件老出错,网络不稳定,VPN连接,经常搞了几百M就断了,搜索了下,发现DOS下的copy命令加个参数/z就可以了,例如:

copy /z \\server\folder\file.txt c:\temp\file.txt

不用下载第三方工具!😀

使用批处理删除一个月以前的文件

这个其实是上一篇文件备份的延续,既然备份了,备份越来越大当然不行,一般保留一个月的备份就足够了,DOS的功能也基本上能够满足这个要求,不废话,直接给脚本了:

rem Backup
y:
cd y:\01_projects\08_saas\TargetProcessDB
set dirname=%date:~10,4%-%date:~4,2%-%date:~7,2%
mkdir %dirname%
cd %dirname%
copy F:\DailyBackup\*.* .
cd ..

rem Remove backup  of one month ago based on dir name
set year=%date:~10,4%
set month=%date:~4,2%
set day=%date:~7,2%
set monthprefix=%month:~0,1%
if %month%==01 goto _lastYear
if %monthprefix% EQU 0 goto _onebitmonth
goto _twobitsmonth

:_lastYear
set /a year=%year%-1
set deldate=%year%-12-%day%
goto _execute

:_onebitmonth
set /a oldmonth=%month:~1,1%-1
set deldate=%year%-0%oldmonth%-%day%
goto _execute

:_twobitsmonth
set /a oldmonth=%month%-1
if %oldmonth% EQU 9 (
set deldate=%year%-0%oldmonth%-%day%
)
else (
set deldate=%year%-%oldmonth%-%day%
)
goto _execute

:_execute
for /f %%d in (‘dir /b /d’) do if %%d LSS %deldate% rmdir /s /q %%d

应该看得懂吧。最后一行要留意下,定义变量的时候用了两个%号,这个是必须的。另外就是日期问题,不用关注闰年问题,因为是进行的字符串比较,日期(例如2010-02-29)即使不是合法日期也是没有关系的。另外就是日期的格式,因为是上一篇的延续,所以当然针对的是上一篇的日期格式了。

更新:

又搜索 了下,如果根据目录自己的创建时间来操作,有更简单的方法:

forfiles /p . /m * /d -30 /c “cmd /c rmdir /s /q @path”

如果是遍历所有的子目录删除文件,也很简单:

forfiles /p . /m *.* /d -30 /c “cmd /c del @path”

Windows下的文件定期备份

应该说这个是简单得不能再简单的事情了,但是在Windows下也不是很容易,主要是OS没有现成的工具,而自带的DOS命令又稍显弱了一点,稍微使用点技巧还是可以解决的。

既然是备份,当然备份到其它的物理机最好,所以第一步就是使用Windows的网络磁盘功能,把其它物理机的具有可写权限的目录映射到本地的磁盘,默认第一个应该是磁盘Z:

然后就是写一个批处理文件完成目录创建和文件拷贝,目录名是当前日期:

Z:
cd targetSubDir
set dirname=%date:~10,4%-%date:~4,2%-%date:~7,2%
mkdir %dirname%
cd %dirname%
copy originalDir\*.* .

简单的说一下,第二行就是进到子目录,如果你备份到本来就是映射盘的根目录,第二行就不用了。第三行是生成当前日期,%DATE%本来就是当前日期,但是格式里面包含空格和/,因此不是合法的目录名,我们把它转换为YYYY-MM-DD这样的合法目录名格式,需要说明的是,网上有文章说不同的OS的默认日期格式不一样,语言不同应该也不一样,我试的是2003Server版,英文。然后创建这个目录,进入这个目录,然后从本地的目录拷贝内容,如果需要备份的内容还包含目录结构,就把copy换成xcopy,originalDir就是本地的需要备份的内容的路径,最好是完整路径,例如c:\db。

第三步就是建一个Schedule Task,是每天跑还是每周或者每月就看自己的需求了,这个很简单,不多说。

调试进程

说实话,这个特性是我做windows开发以来最为赞赏的一个微软的功能。按照一个现在的同事好友的说法(他以前是微软的,铁杆的微软派),只要你有PDB和源代码,你就可以调试任何进程,从目前我的试验来看,此言不虚,而且做起来也不难:

  • 打开一个新的Visual Studio(我用的2005)
  • 选择Tools->Attach to Process
  • 选择你想调试的进程,在选择的时候注意可能要修改Code Type,就我们的项目而言,外壳是C#的,但是调用的都是C++写的COM,所以我把Code Type从自动修改成Managed和Native。
  • 在自动打开的Modules里面选择你需要调试的module,就是load symbol(其实也可以通过Tools->options->debugging->symbols设置全局的symbol,这样就不用每次debug的时候手动的load symbol了),其实就是PDB文件
  • 打开源代码,不需要创建任何工程或者Solution,在进程的操作会触发的地方设置一个断点,等待或者手工触发那个断点的路径

调试COM

对于熟悉的人而言,这个可能不是什么问题,但是对于我这个.net菜鸟和其它的菜鸟,可能还是有用的。

我们新的项目是基于.NET开发的,而我们要调用或者说依赖很多C++的COM组件,我们有COM的源代码,我们的.NET代码在调用COM的时候经常会有问题,但是我们想知道到底是什么问题,这样就需要跟踪进COM里面,详细的步骤在这里:
http://support.microsoft.com/kb/919519
这个KB是How to debug a COM+ component by using Visual Studio 2005 or by using Visual Studio .NET

不过这个KB还不够,它指出了原理性的东西,但是还有些细节没有说:
如果你的工程是C#的工程或者是其他的.NET的工程,那么需要修改工程的debug属性,把Enable unmanaged code debugging选中(如果不选中这个,那么会出现the symbol file does not match the module,即使其实他们是match的)。
那个KB很长,其实重点就是两个:

  • 在Solution的属性里面,把COM的源代码的目录加进去
  • 在VS的选项里面,把COM的symbol加进去,这样就不用在你自己的代码里面设断点再load symbol了

另外文章中的那个加载dllhost那个进程的操作似乎是不需要的,我现在没有操作,可能那个操作对调试COM+有用,对于普通的COM不需要。

Windows+Apache+PHP5+MYSQL5

打算玩玩Drupal,就搭了个环境,不是很难,但是还是遇到不少问题。
先安装Apache,直接下载Installer安装就行了,没有啥特殊的。
安装MYSQL5,也没有啥特殊的,不过有一点,在Windows下,貌似和Linux下不同,我记得原来linux下mysql的admin用户的用户名是sa,但是在windows下变成root了?还是我记性出错?版本更新?
最后讲PHP,因为问题都是它惹的。
第一,不要下载PHP5.3,因为貌似里面不带php5apache2.dll
第二,下载php5.2的zip包,建议不要下installer,因为网上的文章基本上都是基于zip的
第三,解压到例如c:\php目录下
第四,复制php.ini-dist或者php.ini-recommended为php.ini,修改下php.ini文件,把;extension=php_mysql.dll和;extension=php_mysqli.dll这两行前面的分号去掉
第五,修改httpd.conf,添加如下内容:
LoadModule php5_module "C:/PHP/php5apache2_2.dll"
PHPIniDir "C:/PHP"
AddType application/x-httpd-php .php
AddType application/x-httpd-php .html

注意上面的php5apache2_2.dll,如果你安装的apache是2.0系列的,就是php5apache2.dll
第六,把c:\php和c:\php\ext加入系统的PATH环境变量里面
第七,重启计算机

好了,这个PHP的环境才算搭建好了。
把drupal解压到apache的htdocs下,访问那个install.php就可以了(记得先在mysql下面建个数据库,不需要建任何表)。

奇怪的时间自动更新问题

这两天电脑的时间很奇怪,被自动的更新到一个错误的时间了,但是我已经关闭了那个Internet时间同步的功能,把系统服务里面的Window Time服务也停掉了,但是毫无作用,更加奇怪的是这个时间也不是单纯的时区问题,在分钟数上也有差别,大约和正常时间相差16个半小时,郁闷

2007年3月12日更新:
晕死,到头来,原来是CMOS的时间被修改的缘故,但是我并没有修改过CMOS时间啊。可能是周日的问题导致的,那天开机发现屏幕没有显示,和上次的症状一样,把显卡重新装了下还是不好使,后来关闭电源放了几个小时,睡觉前又试了下,竟然又能启动了。

© 2019 解惑

本主题由Anders Noren提供向上 ↑