标题: [文件操作] 【已解决】批处理如何把文件按指定数量移动到新的文件夹? [打印本页]
作者: xzwcn 时间: 2019-10-22 21:48 标题: 【已解决】批处理如何把文件按指定数量移动到新的文件夹?
本帖最后由 xzwcn 于 2019-10-27 09:23 编辑
情景:A文件夹有1000个文件,B文件夹有600个文件。
执行批处理后变成:
A文件夹剩下500个文件,自动创建A2文件夹(有500个文件,来自A文件夹的);
B文件夹剩下500个文件,自动创建B2文件夹(有100个文件);
依此类推,子目录里的文件夹作同样的处理。- @echo off
- set /p DirectoryPath=请输入或拖入源文件夹路径:
- set maxFileCountPerFolder=500
- ::...................应该用什么命令遍历处理?......................................
- pause
复制代码
作者: WHY 时间: 2019-10-23 14:37
本帖最后由 WHY 于 2019-10-23 14:40 编辑
PowerShell 脚本- $fdPath = 'E:\Test'; #待处理的文件夹路径
- $max = 500; #每个文件夹保留的最大文件数
-
- forEach( $fd In (dir -Literal $fdPath -Recurse | ?{$_ -is [IO.DirectoryInfo]}) ){
-
- $file = [IO.Directory]::GetFiles($fd.FullName);
- if( $file.Count -lt $max ) { continue; }
- $n = 0;
- $count = $file.Count / $max;
-
- for( $i=1; $i -lt $count; $i++ ){
- $start = $i * $max;
- $end = ($i + 1) * $max - 1;
- $newFolder = $fd.FullName + '(' + ++$n + ')';
- while( [IO.Directory]::Exists($newFolder) ){ $newFolder = $fd.FullName + '(' + ++$n + ')'; }
- $null = md $newFolder;
- move -Literal $file[$start..$end] -Dest $newFolder;
- }
- }
-
- echo 'Done';
- [Console]::ReadKey();
复制代码
作者: xzwcn 时间: 2019-10-23 14:52
回复 2# WHY - PS C:\Users\Administrator> $PSVersionTable
-
- Name Value
- ---- -----
- CLRVersion 2.0.50727.8800
- BuildVersion 6.1.7601.17514
- PSVersion 2.0
- WSManStackVersion 2.0
- PSCompatibleVersions {1.0, 2.0}
- SerializationVersion 1.1.0.1
- PSRemotingProtocolVersion 2.1
复制代码
请问对ps的版本有要求么?我用win7自带的,执行后提示了Done,源文件夹没发生任何变化。
作者: WHY 时间: 2019-10-23 15:11
回复 3# xzwcn
我这里没有问题,脚本支持 PowerShell v2.0
假设你的 A、B 等文件夹位于 E:\Test 目录下面,否则修改第一行为实际路径。
作者: xzwcn 时间: 2019-10-23 21:30
回复 4# WHY - $fdPath = 'E:\Test'; #待处理的文件夹路径
- $max = 10; #每个文件夹保留的最大文件数
-
- forEach( $fd In (dir -Literal $fdPath -Recurse | ?{$_ -is [IO.DirectoryInfo]}) ){
-
- $file = [IO.Directory]::GetFiles($fd.FullName);
- if( $file.Count -lt $max ) { continue; }
- $n = 0;
- $count = $file.Count / $max;
-
- for( $i=1; $i -lt $count; $i++ ){
- $start = $i * $max;
- $end = ($i + 1) * $max - 1;
- $newFolder = $fd.FullName + '(' + ++$n + ')';
- while( [IO.Directory]::Exists($newFolder) ){ $newFolder = $fd.FullName + '(' + ++$n + ')'; }
- $null = md $newFolder;
- move -Literal $file[$start..$end] -Dest $newFolder;
- }
- }
-
- echo 'Done';
- [Console]::ReadKey();
复制代码
作者: WHY 时间: 2019-10-23 22:08
回复 5# xzwcn
在 PowerShell 控制台运行。
[Console]::ReadKey() 在 ISE 下回报错
作者: WHY 时间: 2019-10-23 22:12
回复 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>
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |