[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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
复制代码

回复 5# xzwcn


    像这样:
Windows PowerShell
版权所有 (C) 2009 Microsoft Corporation。保留所有权利。

PS C:\Users\WHY> dir E:\Test -Recurse


    目录: E:\Test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d----        2019/10/23     21:51                img


    目录: E:\Test\img


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-ar--         2017/4/24     21:29           3456 1.Log
-ar--         2017/10/9     23:42            388 a - 副本.txt
-ar--         2017/10/9     23:42            388 a.txt
-ar--         2017/4/15     13:01        1005978 img100_[1].jpg
-ar--         2017/4/15     12:00         672772 img100_[2].jpg
-ar--         2017/4/15     12:19        1591082 img101.jpg
-ar--          2017/1/1     23:42         503511 img105.jpg
-ar--         2017/4/15     11:59         200950 img105_[1].jpg
-ar--         2017/10/9     23:41        2357284 img105_[1].png
-ar--         2017/10/9     23:41        3316214 img105_[2].png
-ar--         2017/4/15     12:04         575932 img108.jpg
-ar--         2017/4/15     12:05         370956 img109.jpg
-ar--         2017/10/9     23:42        2306844 img109.png
-ar--         2017/10/9     23:41        2144233 img109_[1].png
-ar--         2017/10/9     23:40        1370669 img109_[2].png
-ar--         2017/4/15     11:59         187861 img110.jpg
-ar--         2017/4/15     12:03         741356 img111.jpg
-ar--          2017/1/1     23:19         441291 img202.jpg
-ar--          2017/1/1     23:29         873583 img207.jpg
-ar--          2017/1/1     23:26         394566 img207_[1].jpg
-ar--         2017/4/24     21:05            440 test.bat
-ar--         2017/4/24     21:33            233 新建 文本文档.PS1


PS C:\Users\WHY> PowerShell -exec ByPass "&'C:\Users\WHY\Desktop\Test.PS1'"
Done

KeyChar   Key Modifiers
-------   --- ---------
    ... Enter         0


PS C:\Users\WHY> dir E:\Test -Recurse


    目录: E:\Test


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d----        2019/10/23     21:56                img
d----        2019/10/23     21:56                img(1)
d----        2019/10/23     21:56                img(2)


    目录: E:\Test\img


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-ar--         2017/4/24     21:29           3456 1.Log
-ar--         2017/10/9     23:42            388 a - 副本.txt
-ar--         2017/10/9     23:42            388 a.txt
-ar--         2017/4/15     13:01        1005978 img100_[1].jpg
-ar--         2017/4/15     12:00         672772 img100_[2].jpg
-ar--         2017/4/15     12:19        1591082 img101.jpg
-ar--          2017/1/1     23:42         503511 img105.jpg
-ar--         2017/4/15     11:59         200950 img105_[1].jpg
-ar--         2017/10/9     23:41        2357284 img105_[1].png
-ar--         2017/10/9     23:41        3316214 img105_[2].png


    目录: E:\Test\img(1)


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-ar--         2017/4/15     12:04         575932 img108.jpg
-ar--         2017/4/15     12:05         370956 img109.jpg
-ar--         2017/10/9     23:42        2306844 img109.png
-ar--         2017/10/9     23:41        2144233 img109_[1].png
-ar--         2017/10/9     23:40        1370669 img109_[2].png
-ar--         2017/4/15     11:59         187861 img110.jpg
-ar--         2017/4/15     12:03         741356 img111.jpg
-ar--          2017/1/1     23:19         441291 img202.jpg
-ar--          2017/1/1     23:29         873583 img207.jpg
-ar--          2017/1/1     23:26         394566 img207_[1].jpg


    目录: E:\Test\img(2)


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-ar--         2017/4/24     21:05            440 test.bat
-ar--         2017/4/24     21:33            233 新建 文本文档.PS1


PS C:\Users\WHY>

TOP

回复 5# xzwcn


    在 PowerShell 控制台运行。
[Console]::ReadKey() 在 ISE 下回报错

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

回复 3# xzwcn


    我这里没有问题,脚本支持 PowerShell v2.0
假设你的 A、B 等文件夹位于 E:\Test 目录下面,否则修改第一行为实际路径。

TOP

回复 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

本帖最后由 WHY 于 2019-10-23 14:40 编辑

PowerShell 脚本
  1. $fdPath = 'E:\Test';   #待处理的文件夹路径
  2. $max = 500;            #每个文件夹保留的最大文件数
  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();
复制代码
1

评分人数

    • xzwcn: 感谢分享技术 + 1

TOP

返回列表