问:
您好,脚本专家!如何删除名称中有撇号的文件夹?
-- 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'。在文件夹名称中的任何撇号前面均放一个 \,脚本就可以正常工作了。是的,虽然看起来有点怪,但确实起作用。
您好,脚本专家!如何删除名称中有撇号的文件夹?
-- 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'。在文件夹名称中的任何撇号前面均放一个 \,脚本就可以正常工作了。是的,虽然看起来有点怪,但确实起作用。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
内蒙古资源网 Copyright www.nmgbbs.com
暂无“用vbs实现删除名称中有撇号的文件夹”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。