[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 【已解决】批处理如何把文件按指定数量移动到新的文件夹?

本帖最后由 xzwcn 于 2019-10-27 09:23 编辑

情景:A文件夹有1000个文件,B文件夹有600个文件。
执行批处理后变成:
A文件夹剩下500个文件,自动创建A2文件夹(有500个文件,来自A文件夹的);
B文件夹剩下500个文件,自动创建B2文件夹(有100个文件);
依此类推,子目录里的文件夹作同样的处理。
  1. @echo off
  2. set /p DirectoryPath=请输入或拖入源文件夹路径:
  3. set maxFileCountPerFolder=500
  4. ::...................应该用什么命令遍历处理?......................................
  5. pause
复制代码

回复 2# WHY
  1. PS C:\Users\Administrator> $PSVersionTable
  2. Name                           Value
  3. ----                           -----
  4. CLRVersion                     2.0.50727.8800
  5. BuildVersion                   6.1.7601.17514
  6. PSVersion                      2.0
  7. WSManStackVersion              2.0
  8. PSCompatibleVersions           {1.0, 2.0}
  9. SerializationVersion           1.1.0.1
  10. PSRemotingProtocolVersion      2.1
复制代码
请问对ps的版本有要求么?我用win7自带的,执行后提示了Done,源文件夹没发生任何变化。

TOP

回复 4# WHY
  1. $fdPath = 'E:\Test';   #待处理的文件夹路径
  2. $max = 10;            #每个文件夹保留的最大文件数
  3. forEach( $fd In (dir -Literal $fdPath -Recurse | ?{$_ -is [IO.DirectoryInfo]}) ){
  4.     $file = [IO.Directory]::GetFiles($fd.FullName);
  5.     if( $file.Count -lt $max ) { continue; }
  6.     $n = 0;
  7.     $count = $file.Count / $max;
  8.     for( $i=1; $i -lt $count; $i++ ){
  9.         $start = $i * $max;
  10.         $end = ($i + 1) * $max - 1;
  11.         $newFolder = $fd.FullName + '(' + ++$n + ')';
  12.         while( [IO.Directory]::Exists($newFolder) ){ $newFolder = $fd.FullName + '(' + ++$n + ')'; }
  13.         $null = md $newFolder;
  14.         move -Literal $file[$start..$end] -Dest $newFolder;
  15.     }
  16. }
  17. echo 'Done';
  18. [Console]::ReadKey();
复制代码

TOP

返回列表