我正在尝试编写一个脚本,它将随机选择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文件)
答案 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&邮编问题。