gpt4 book ai didi

file - 如何复制某些文件(无文件夹层次结构),但不覆盖现有文件?

转载 作者:行者123 更新时间:2023-12-04 01:35:06 24 4
gpt4 key购买 nike

我需要复制所有 *.doc来自网络文件夹 *.doc 的文件(但不是名称匹配 \\server\source 的文件夹) (包括所有嵌套文件夹中的文件)到本地文件夹 C:\destination不保留嵌套文件夹层次结构(即所有文件都应直接进入 C:\destination 并且不应在 C:\destination 中创建嵌套文件夹)。如果 \\server\source 的不同子文件夹中有多个同名文件, 只有第一个应该被复制,然后永远不要覆盖——所有后来发现的冲突文件都应该被跳过(这样的情况可能很多,跳过的文件不应该通过网络传输,否则会花费太多时间) .这是我在 PowerShell 中实现它的尝试:

cp \\server\source\* -Recurse -Include *.doc -Container:$false -Destination C:\destination

这个命令至少有两个问题:
  • 它复制名称匹配 *.doc 的文件夹也。
  • 在名称冲突的情况下,以后找到的任何文件都将通过网络传输并覆盖前一个文件。

  • 你能建议如何解决这些问题吗?
    使用 copy 的实现, xcopy , robocopy , cscript*.bat , *.cmd也欢迎。
    本地操作系统为 Windows 8,文件系统为 NTFS。

    最佳答案

    我会首先生成文件列表并在您浏览列表时进行验证。

    像这样的东西:

    $srcdir = "\\server\source\";
    $destdir = "C:\destination\";
    $files = (Get-ChildItem $SrcDir -recurse -filter *.doc | where-object {-not ($_.PSIsContainer)});
    $files|foreach($_){
    if (!([system.io.file]::Exists($destdir+$_.name))){
    cp $_.Fullname ($destdir+$_.name)
    };
    }

    所以,使用 Get-ChildItem列出源文件夹中与过滤器匹配的文件,管道通过 where-object去除目录。

    然后遍历 foreach 中的每个文件使用 Exists 循环并检查文件名(不是全名)是否存在于目标中 system.io.file的方法.NET 类。

    如果没有,请复制,仅使用原始文件名(删除原始路径)。

    使用 -whatif测试时副本上的选项,所以它只显示它会做什么,以防结果不是你想要的:-)

    关于file - 如何复制某些文件(无文件夹层次结构),但不覆盖现有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17497667/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com