5

关于使用 PowerShell 移动项目的快速问题:有谁知道为什么当文件名上有 [ 或 ] 字符时以下脚本不起作用?(例如:file1[VT].txt

ls j:\ | foreach { 
  $itemName = $_.Name.Replace('.', ' ') 
  $destination = ls | where { $itemName -match $_.Name } | select -First 1 
  if ($destination -ne $null) {       
    mi $_.PSPath $destination.PSPath -Verbose -WhatIf  
  } 
}

例如,如果文件名为file1.txt ,它将移动文件,但它会简单地忽略名为file1[VT].txt的文件。我假设当文件名上有字符 [ 或 ] 时,它没有找到文件的路径。有任何想法吗?

4

3 回答 3

6

只需使用-literalpath参数move-item

ls j:\ | foreach { 
  $itemName = $_.Name.Replace('.', ' ') 
  $destination = ls | where { $itemName -match $_.Name } | select -First 1 
  if( $destination -ne $null){       
   mi -literalpath $_.PSPath $destination.PSPath -Verbose -WhatIf  
  } 
}
于 2013-02-13T06:39:23.920 回答
0

如果你改变这一行怎么办:

mi $_.PSPath $destination.PSPath -Verbose -WhatIf

变成这样:

mi "$($_.PSPath)" "$($destination.PSPath)" -Verbose -WhatIf
于 2013-02-12T22:36:17.627 回答
0

当您使用 -match 运算符时,它将您正在寻找的模式(在您的示例中为 $_.Name)视为正则表达式。在 .NET 正则表达式中,[ 和 ] 字符用于将一个字符与一组标记进行匹配。例如,正则表达式

{"file1[vt]"} 

将匹配字符串“file1v”和“file1t”。为了使用

于 2013-02-12T22:40:31.960 回答