[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. cd Task
  3. $num = 5
  4. [System.Collections.ArrayList]$src = @()
  5. $dir = dir -filter *. | where{
  6. (dir $_ -name) -contains "OK" -and (dir $_ -name) -notcontains "NO"
  7. }
  8. $src += $dir | foreach{
  9. dir $_ -exclude OK |
  10. where{ (dir $_ -n) -contains "YES" }
  11. }
  12. $des += dir -filter *. | where{
  13. (dir $_ -name) -contains "OK" -and (dir $_ -name) -contains "NO"
  14. }
  15. $src|foreach{
  16. if(test-path $_\yes){
  17. ren $_\yes $_.parent.name
  18. }
  19. }
  20. $des | foreach{
  21. for ($i = (dir $_).count; $i -lt $num; $i++){
  22. if($src.count -gt 0){
  23. move $src[0] $_
  24. $src.removeat(0)
  25. }
  26. }
  27. }
复制代码
sorry,没注意到重命名的要求,错误提示是因为可移动对象数量和目标空位数量不对等。现在加了个if判断。(原代码是准备放到task目录下。)

TOP

本帖最后由 5i365 于 2022-2-11 07:48 编辑

回复 2# for_flr


    另外, 如果我把  2  下的 B1 删除, 然后执行脚本后, A1 能转移成功, 但是报下面的错误
【PS:上面的示意图加了/F 参数显示文件了, 逻辑描述文字也更清楚了】
-----------------------------------------------------------------------

Move-Item : Cannot bind argument to parameter 'Path' because it is null.
At line:25 char:8
+         move $src[0] $_
+              ~~~~~~~
    + CategoryInfo          : InvalidData: ( [Move-Item], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.MoveItemCom
   mand

Exception calling "RemoveAt" with "1" argument(s): "Index was out of range. Must be non-negative and less than the size
of the collection.
Parameter name: index"
At line:26 char:3
+         $src.removeat(0)
+         ~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentOutOfRangeException

请按任意键继续. . .

TOP

本帖最后由 5i365 于 2022-2-11 07:48 编辑

回复 2# for_flr


     感谢帮忙, 我把下面的代码存成BAT文件然后和要处理的Task文件夹放在一个文件夹下, 执行后转移文件夹成功,  但是没有将YES文件命名为其原来的父父文件夹名
【PS:上面的示意图加了/F 参数显示文件了, 逻辑描述文字也更清楚了】
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
  2. cd Task
  3. $num = 5
  4. [System.Collections.ArrayList]$src = @()
  5. $dir = dir -filter *. | where{
  6. (dir $_ -name) -contains "OK" -and (dir $_ -name) -notcontains "NO"
  7. }
  8. $src += $dir | foreach{
  9. dir $_ -exclude OK |
  10. where{ (dir $_ -n) -contains "YES" }
  11. }
  12. $des += dir -filter *. | where{
  13. (dir $_ -name) -contains "OK" -and (dir $_ -name) -contains "NO"
  14. }
  15. $des | foreach{
  16. for ($i = (dir $_).count; $i -lt $num; $i++)
  17. {
  18. move $src[0] $_
  19. $src.removeat(0)
  20. }
  21. }
复制代码

TOP

  1. $num=5
  2. [System.Collections.ArrayList]$src=@()
  3. $dir=dir -filter *.|?{(dir $_ -name) -contains "OK" -and (dir $_ -name) -notcontains "NO"}
  4. $src+=$dir|%{dir $_ -exclude OK|?{(dir $_ -n) -contains "YES"}}
  5. $des+=dir -filter *.|?{(dir $_ -name) -contains "OK" -and (dir $_ -name) -contains "NO"}
  6. $des|%{for($i=(dir $_).count;$i -lt $num;$i++){move $src[0] $_;$src.removeat(0)}}
复制代码

TOP

返回列表