关闭

小议Test-Path参数IsVaild的使用限制

1525人阅读 评论(2) 收藏 举报

作者: Edengundam(马涛)

之前, 我曾经翻译过一个cmdlet命令: Test-Path, 这个命令用于确定路径的所有元素是否存在。今天, 我们主要查看一下该命令的参数IsValid.
首先, 我们先看下这个参数的描述:

-isValid <SwitchParameter>
    确定路径的语法是否正确(不管路径的元素是否存在)。如果路径语法有效,则返回 True;如果其无效,则返回 False。

注意这里<SwitchParameter>意味着此参数不需要指定任何参数值(argument). 先让我们看几个例子:

PS C:Scripts>   Test-Path c: -isValid  # 我们期待这是个正确的目录
True

PS C
:Scripts>   Test-Path c:]] -isValid  #这也是个正确的目录
True

PS C
:Scripts>   Test-Path c:/ -isValid  #这个正确嘛?有疑问??
True

PS C
:Scripts>   Test-Path / -isValid   #这个呢?看起来不像正确的.
False

PS C
:Scripts>   Test-Path z/ -isValid  #这个肯定错了吧!
True

PS C
:Scripts>   Test-Path z/// -isValid  #这个鬼东西...错了!
True

PS C
:Scripts>   Test-Path a-isValid   #看起来挺对的
True

怎么样, 这些结果是不是让你觉得很郁闷, 明明有些路径根本就是非法的, 为什么还会返回正确的结果呢??这是由于Test-Path只是简单的查看路径名中是否存在非法的字符. 请看下面的例子:

PS C:> Test-Path z/ -isValid -PathType Leaf
True
PS C
:> Test-Path z/ -isValid -PathType container
True
PS C
:scripts> New-Item z/ -ItemType container


    目录
: Microsoft.PowerShell.CoreFileSystem::C:scripts


Mode                LastWriteTime     
Length Name
----                -------------     ------ ----
d
----         2007-9-25     17:49            z

经过确认'z///'是合法路径后, 我们调用New-Item创建目录'z///', 结果只创建了目录'z'. 也许这是此命令的一个缺陷, 希望PowerShell的下个版本能让它按照我们期待的运行.
不过我个人觉得, 其实不管如何, 我们直接去尝试创建目录即可, 然后只需要使用trap捕获异常事件即可. 最后, 附赠一个小脚本, 可以输出ASCII码0-127中, 哪些字符禁止出现在路径中.

PS C:scripts> 32..127 | ?!(Test-Path -Path "$([char]$_)" -IsValid) } | %{ [char]$_ }
"
*
:
<
>
?
|

这里我省略了0-31的字符, 有兴趣的朋友可以自己试试^^
 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:443521次
    • 积分:7092
    • 等级:
    • 排名:第3297名
    • 原创:110篇
    • 转载:10篇
    • 译文:138篇
    • 评论:87条
    最新评论