Powershell以递增的方式将文件移动到文件夹并压缩每个文件夹

时间:2014-03-21 17:08:31

标签: batch-file powershell

我正在尝试编写一个脚本,它将随机选择N个文件,并将它们移动到名为1,2,3的文件夹中。然后它必须压缩每个文件夹,然后运行另一个批处理/脚本。

我用来随机复制N个文件的脚本是:

gci somefolder | random -c $x | mi -dest someotherfolder

我需要的例子:

C:\somefolder (has 11000 files)
C:\1 (has 2000 files)
C:\2 (has 2000 files)
C:\3 (has 2000 files)
C:\4 (has 2000 files)
C:\5 (has 2000 files)
C:\6 (has 1000 files)

然后将每个文件夹压缩为

C:\1.zip
C:\2.zip
C:\3.zip
C:\4.zip
C:\5.zip
C:\6.zip

最后,它将运行一个简单的另一个批处理文件(思考FTP文件)

1 个答案:

答案 0 :(得分:2)

非常感谢//\O// out-zip的{{3}}功能!这将做你想要的:

function out-zip { 
    Param([string]$path) 

    if (-not $path.EndsWith('.zip')) {$path += '.zip'} 

    if (-not (test-path $path)) { 
      set-content $path ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
    } 
    $ZipFile = (new-object -com shell.application).NameSpace($path) 
    $input | foreach {$zipfile.CopyHere($_.fullname)} 
}
$Path = "C:\Temp"
$FileList = gci $path
[int]$FilesPerZip=100
For($i=1;$i -le [Math]::Ceiling($FileList.count/$FilesPerZip);$i++){
    md "c:\$($i)"
    gci $path|random -Count $FilesPerZip|%{$_.moveto("c:\$i\$($_.name)")}
}
(1..[Math]::Ceiling($FileList.count/$FilesPerZip))|%{gi "c:\$_"|out-zip "C:\$_.zip"}

只需更新您的路径以及每个zip文件中需要的文件数量。

这将计算总共有多少文件,除以每个zip文件所需的文件数量,然后进行舍入。然后它遍历目标目录,随机抓取X文件并将它们放入连续编号的文件夹中。最后,它会压缩这些文件夹。

如果已经存在具有所需名称的zip文件(即C:\ 1.zip),它将失败,如果那些文件夹中也存在错误,如果有这些文件夹则会失败并且它们中有匹配的文件,因此您可能需要预先进行一些检查以确保这些文件夹和文件不存在,但这会回答您的Move&邮编问题。