PowerShell中的自定义robocopy脚本

时间:2017-12-16 13:41:45

标签: powershell robocopy

我想将源目录中存在的所有.txt文件(包括子文件夹中存在的.txt)移动到目标目录。

例如: 来源目录:D:\OFFICE work\robtest\test1

上面的目录还包含许多子文件夹。

目标目录:D:\OFFICE work\robtest\test2

我想只将源目录中的.txt文件移动到上面提到的目标目录,这样每个子文件夹(包括创建随机文件夹)中只能存在3个.txt文件。< / p>

下面是我尝试的代码,但PowerShell说

  

文件名,目录名或卷标语法。(D:\ OFFICE work \ robtest \ test1 \ testtest \ testtest2 \   新文件夹\ test01112.txt \)不正确。

我不确定为什么会有额外的&#39; /&#39;在robocopy中的上述路径之后。

$fileperfolder = 3
$source = "D:\OFFICE work\robtest\test1";
$dest = "D:\OFFICE work\robtest\test2";
$folderName = [System.IO.Path]::GetRandomFileName();
$fileList = Get-ChildItem -Path $source -Filter *.txt -Recurse
Write-Host $fileList
$i = 0;
foreach ($file in $fileList) {
    $destiny = $dest + "\" + $folderName
    Write-Host $file.FullName;
    Write-Host $destiny;
    New-Item $destiny -Type Directory -Force
    robocopy $file.FullName $destiny /mov
    $i++;
    if ($i -eq $fileperfolder) {
        $folderName = [System.IO.Path]::GetRandomFileName();
        $i = 0;
    }
}

2 个答案:

答案 0 :(得分:1)

您收到错误(以及&#34;目录&#34;在输出中),因为robocopy需要两个文件夹作为第一个和第二个参数,可选后面是文件名规范列表,但您提供了文件的路径作为源。

来自documentation(强调我的):

  

语法

     
robocopy <Source> <Destination> [<File>[ ...]] [<Options>]
     

参数

     
      
  • <Source>指定源 目录的路径
  •   
  • <Destination>指定目标 目录的路径
  •   
  • <File>指定要复制的文件。如果需要,您可以使用通配符(*?)。如果未指定File参数,则*.*将用作默认值。
  •   
  • <Options>指定与robocopy命令一起使用的选项。
  •   

由于您一次只移动一个文件并且显然不想维护目录结构,我说robocopy并不是您正确使用的工具。 #39;无论如何都要做。

替换

robocopy $file.FullName $destiny /mov

Move-Item $file.FullName $destiny

代码应该做你想做的事。

答案 1 :(得分:0)

robocopy $ file.Directory $ destiny $ file / mov

解决了这个问题。