【问题标题】:Find All Files With Parentheses?查找所有带括号的文件?
【发布时间】:2013-08-12 10:55:03
【问题描述】:

我最近买了一台新笔记本电脑,出于某种原因,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

【问题讨论】:

    标签: powershell


    【解决方案1】:

    你可以这样做:

    $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
    }
    

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

    【讨论】:

    • 现在才看到,谢谢,会检查的。从来没有非常擅长正则表达式,但我想我需要蹲下来学习 - 在我尝试做的各种 PoSH 示例中不断看到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2016-02-15
    相关资源
    最近更新 更多