关于使用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 的文件。我假设当它的名字上有chars [或]时,它没有找到文件的路径。有什么想法吗?
答案 0 :(得分:5)
仅使用-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
}
}
答案 1 :(得分:0)
如果您更改此行,该怎么办:
mi $_.PSPath $destination.PSPath -Verbose -WhatIf
是这样的:
mi "$($_.PSPath)" "$($destination.PSPath)" -Verbose -WhatIf
答案 2 :(得分:0)
当您使用-match运算符时,它会将您要查找的模式(在您的示例中为$ _.Name)视为正则表达式。在.NET正则表达式中,[和]字符用于将字符与一组标记进行匹配。例如,正则表达式
{"file1[vt]"}
将匹配字符串“file1v”和“file1t”。为了使用