Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Robocopy:复制文件,保留文件夹结构,但添加子文件夹_Windows_Powershell_Command Line_Directory_Robocopy - Fatal编程技术网

Windows Robocopy:复制文件,保留文件夹结构,但添加子文件夹

Windows Robocopy:复制文件,保留文件夹结构,但添加子文件夹,windows,powershell,command-line,directory,robocopy,Windows,Powershell,Command Line,Directory,Robocopy,我需要将包含文件子文件夹的文件夹复制到另一台计算机上的共享文件夹。在此期间,脚本应在每个目标文件夹中创建一个自定义子文件夹,并将文件放在其中 我希望这个例子能说明这项任务: 用于以下源文件夹: --Logs ----Application ------Service --------Log1.txt --------Log2.txt ------WebSite --------Log1.txt --------Log2.txt --Logs ----Application ------Serv

我需要将包含文件子文件夹的文件夹复制到另一台计算机上的共享文件夹。在此期间,脚本应在每个目标文件夹中创建一个自定义子文件夹,并将文件放在其中

我希望这个例子能说明这项任务:

  • 用于以下源文件夹:

    --Logs
    ----Application
    ------Service
    --------Log1.txt
    --------Log2.txt
    ------WebSite
    --------Log1.txt
    --------Log2.txt
    
    --Logs
    ----Application
    ------Service
    --------Machine1
    ----------Log1.txt
    ----------Log2.txt
    ------WebSite
    --------Machine1
    ----------Log1.txt
    ----------Log2.txt
    
  • 应按以下方式创建目标文件夹:

    --Logs
    ----Application
    ------Service
    --------Log1.txt
    --------Log2.txt
    ------WebSite
    --------Log1.txt
    --------Log2.txt
    
    --Logs
    ----Application
    ------Service
    --------Machine1
    ----------Log1.txt
    ----------Log2.txt
    ------WebSite
    --------Machine1
    ----------Log1.txt
    ----------Log2.txt
    
  • 正如您在底层看到的,已经创建了子文件夹
    Machine1
    。 您能否提供一个执行此操作的PowerShell脚本示例

    我研究了ROBOCOPY命令中的输入参数。这似乎不允许这么简单


    我还知道,我可以同步遍历所有文件夹结构,创建所需的子文件夹,并将文件复制到每个子文件夹。但这似乎太“漫长”了。所以我想知道我是否遗漏了什么。也许有更好的智能方法可以做到这一点。

    我建议使用
    robocopy
    复制子文件夹的内容:

    $srcBase = 'C:\some\Logs\Application'
    $dstBase = 'D:\other\Logs\Application'
    
    Get-ChildItem $srcBase | ? { $_.PSIsContainer } | % {
      $dst = "$dstBase\$($_.Name)\Machine1"
    
      & robocopy $_.FullName $dst /e
    }
    

    您正在运行哪个版本的Powershell?@mjolinor版本2.0此版本不会在目标中创建相同的文件夹结构。实际上,它直接在根文件夹中创建所有子文件夹。但是我需要一棵与source完全相同的树(参见我问题中的示例)@Egor4eg当我测试它时,它工作得很好。请注意,您需要在
    $dstBase
    中包含公共父文件夹(
    Logs\Application
    )。如果它仍然不适合你,请用你当前使用的代码更新你的问题。是的,你是对的。这将适用于我的示例。我忘了提到几个“应用程序”文件夹是可能的。很抱歉。无论如何,我已经写了剧本,你的评论很有帮助。将其标记为答案。。。