不知发在这里是否合适,好歹PowerShell跟C#差不多。
碰到一个很奇怪的问题,在PowerShell里怎么也rename不了一个带有方括号的文件名,因为方括号是正则表达式的字符,而PowerShell用反撇号作为转义符,这样就有一些很奇怪的问题。
比如文件[10]:
PS F:\temp> dir '`[10`]'
Get-ChildItem : 找不到路径“F:\temp\`[10`]”,因为该路径不存在。
所在位置 行:1 字符: 4
+ dir <<<< '`[10`]'如果用两个反撇号就可以列出来:
PS F:\temp> dir '``[10``]'
目录: Microsoft.PowerShell.Core\FileSystem::F:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2008-12-25 11:03 22 [10]但是rename就不行:
PS F:\temp> Rename-Item 'F:\temp\`[10`]' 'F:\temp\10'
Rename-Item : 指定路径 F:\temp\`[10`] 下的对象不存在。
所在位置 行:1 字符: 12
+ Rename-Item <<<< 'F:\temp\`[10`]' 'F:\temp\10'无论用多少转义符都不行,哪位能帮我看看?
碰到一个很奇怪的问题,在PowerShell里怎么也rename不了一个带有方括号的文件名,因为方括号是正则表达式的字符,而PowerShell用反撇号作为转义符,这样就有一些很奇怪的问题。
比如文件[10]:
PS F:\temp> dir '`[10`]'
Get-ChildItem : 找不到路径“F:\temp\`[10`]”,因为该路径不存在。
所在位置 行:1 字符: 4
+ dir <<<< '`[10`]'如果用两个反撇号就可以列出来:
PS F:\temp> dir '``[10``]'
目录: Microsoft.PowerShell.Core\FileSystem::F:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2008-12-25 11:03 22 [10]但是rename就不行:
PS F:\temp> Rename-Item 'F:\temp\`[10`]' 'F:\temp\10'
Rename-Item : 指定路径 F:\temp\`[10`] 下的对象不存在。
所在位置 行:1 字符: 12
+ Rename-Item <<<< 'F:\temp\`[10`]' 'F:\temp\10'无论用多少转义符都不行,哪位能帮我看看?
本以为rename-item和move-item都可以改名,谁知表现会不一样,这个问题网上搜了一下,在PS1.0之前他们发现了这个问题,
然后修改了*-item的命令,除了rename-item,因为他们认为可以用move-item命令来实现。
这个理由似乎也太牵强了。2楼说的move-item可以,多谢!