powershell – 查找带括号的所有文件?

我最近买了一台新的笔记本电脑,由于某些原因,DropBox决定复制那里的所有东西.我喜欢经常教我自己一点PoSH,所以我可以更擅长它,所以我认为这可能是一个好时机,但到目前为止,没有运气我的唠叨.我不是一个总菜鸟,但绝对还是一点点.

基本上所有的欺骗文件都有一个(1)(例如文件名(1).txt).我能够找到那些:

gci -recurse | ? { $_.Name -like "*(1)*" }

好到目前为止,但后来我想将它们移动到“dupes”目录并保留子文件夹结构.无论出于何种原因,看起来应该是简单的,PoSH让人变得非常努力.我搜索过高低,发现了一些接近的例子,但它们还包括一些其他参数,最终让我感到困惑.我相信我追求的是:

*使用上述命令查找项目
*管道移动项目
*以某种方式包括New-Item -itemtype Directory -force
*还要检查该目录是否尚不存在

目前我有:

$from = "C:\users\xxx\Dropbox"
$to = "C:\Users\xxx\Downloads\DropBox Dupes"
gci | ? { $_.Name -like "*(1)*" } | New-Item -ItemType Directory -Path $to -Force
Move-Item $from $to -Force

任何指针/帮助/示例?

谢谢!

附:虽然我已经停止了Dropbox并试了几个不同的文件,但我现在得到了:

Move-Item : Cannot move item because the item at 'C:\users\jkelly.MC\Dropbox' is in use.
At line:2 char:1
+ Move-Item $from $to -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [Move-Item],     PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveItemCommand

最佳答案 你可以这样做:

$source = "C:\Dropbox"
$destination = "C:\DropboxDupes"
gci .\Dropbox -Recurse -File | ?{ $_.basename -match ".*\(\d+\)$"} | % {

    $destination_filename = $_.fullname.Replace($source, $destination)
    $destination_dir = split-path $destination_filename -Parent
    if(-not (Test-Path $destination_dir -PathType Container)) {
        mkdir $destination_dir | out-null
    }
    move-item $_.fullname $destination_filename
}

它基本上用文件中的目标基本路径替换源基本路径以保留目录结构.您可以根据需要对其进行微调

点赞