| 网站首页 | 新闻中心 | 系统安全 | 网络安全 | 安全技术 | 下载中心 | 
课件制作网.
收藏本站
设为首页
安全365
如何删除名称中有撇号的文件夹?
如何删除名称中有撇号的文件夹?
作者:佚名 文章来源:不详 点击数: 更新时间:2007-1-24 11:14:47
问:

您好,脚本专家!如何删除名称中有撇号的文件夹?

-- JH

答:

您好,JH。噢,是的,撇号:每个脚本编写者的主要灾难来源。撇号看起来只是一个简单的小字符,但切莫让它的外表所迷惑:撇号(或单引号)可能是键盘上最致命的字符。无论您是使用 Active Directory、数据库,还是文件系统,一个撇号就可以给您的脚本带来全部灾难。正如 Bart Simpson 曾经形容 Hershey® 的 Milk Dud 糖果,撇号也是“甜外毒内”。

注意:不,Milk Dud 里面并非真的有毒药。

撇号的问题在于它是“保留”字符,也就是 VBScript 自己专用的字符。例如,假设您要删除文件夹 C:/Scripts。下面的脚本就将执行这一操作:

strComputer = "."

Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")



Set colFolders = objWMIService. _

    ExecQuery("Select * From Win32_Directory Where Name = 'C://Scripts'")



For Each objFolder in colFolders

    errResults = objFolder.Delete

Next

如果您仔细查看 Where 子句,您会发现撇号(或单引号)用于代表一个字符串值:‘C://Scripts’。这就是我们在处理名称中有撇号的文件夹(例如,Ken’s Scripts)时出现问题的原因。如果我们尝试运行如下脚本,您猜猜会发生什么?

strComputer = "."

Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")



Set colFolders = objWMIService. _

    ExecQuery("Select * From Win32_Directory Where Name = 'C://Ken's Scripts'")



For Each objFolder in colFolders

    errResults = objFolder.Delete

Next

我们不会让您处于紧张的等待状态:这个脚本必然会失败。为什么?唔,请看其中的 Where 子句:

Where Name = 'c://Ken's Scripts'

因为在 Where 子句中用撇号标记字符串的起始和结尾,所以 VBScript 认为文件夹的名称为:‘C://Ken’。这本来没问题,只可惜紧该字符串后面还有一串字符 (s Scripts’)。VBScript 不知道这些杂乱数据表示什么,因此它只是放弃且不做任何尝试。

是的,我们知道。但这就是 VBScript 的工作方式。因为撇号是一个保留字符,用来(还有其它用途)在 Where 子句中标记字符串的起始和结尾。VBScript 只是不了解我们在说什么。

不,绝对不是笑话大多数不幸与脚本专家交谈的人。那个问题太简单了!

那么,有没有解决这个问题的方法呢?肯定有。您也许知道,每次在 Where 子句中(例如,在文件路径中)使用反斜线 (/) 时,必须在其前面放置另一个 / 来“转义”反斜线;这就是为什么我们的文件路径类似 C://Scripts 而非 C:/Scripts。我们必须这样做,因为 / 也是一个保留字符;指示 VBScript 按原样使用 / 的唯一方法就是转义它(只是使用另一个 / 作为其开端)。

嗨,稍等一下:如果只需使用另一个 / 作为开端就可以使用保留字符 /,或许您也可以使用如单引号之类的保留字符,方法是使用 / 作为的开端。

您知道,这确实神奇地奏效了:

strComputer = "."

Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")



Set colFolders = objWMIService. _

    ExecQuery("Select * from Win32_Directory Where Name = 'C://Ken/'s Scripts'")



For Each objFolder in colFolders

    errResults = objFolder.Delete

Next

答案就在这里,JH。请注意我们是如何在撇号前面放置 / 的;从而我们得到的结构看起来像这样:‘C://Ken/’s Scripts’。在文件夹名称中的任何撇号前面均放一个 /,脚本就可以正常工作了。是的,虽然看起来有点怪,但确实起作用。

就像一块 Milk Dud 糖果。

【转自世纪安全网 http://www.21safe.com】
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
     
     
     
    CSO们如何应对新技术的安
    普通企业如何应对黑客攻
    企业该如何防范由VoIP引
    浅谈IT如何实现企业的应
    黑客与正规企业是如何串
    如何无限制申请Gmail 2.
    企业如何避免人为因素的
    社会工程学:如何利用黑客
    如何在一个文件被添加到
    如何将“珊瑚虫”好友请

    Copyright © 2006-2008 www.anquan365.com 安全365
    建议使用1024*768分辨率及第三方浏览器对本站进行浏览