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

回复 13# for_flr


    我把根据文件DD移动到OK文件夹的功能去掉了, 只留下了最开始,那个复杂的, 根据文件夹数量移动文件夹的功能,

问题就是, 在不满足移动条件下, 仍会把源文件夹中的yes改名, 应该是先移过去, 然后再改名, 但文件名又是原来的文件夹的父目录名

感觉问题应该出在红色字的地方, 尝试加在后面蓝字的地方也不行, 不知道怎样改粉色地方的代码


#@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
cd Task3

$num = 5

[System.Collections.ArrayList]$src = @()

$dir = dir -filter *. | where{
        (dir $_ -name) -contains "OK" -and (dir $_ -name) -notcontains "NO"
}

$src += $dir | foreach{
        dir $_ -exclude OK |
        where{ (dir $_ -n) -contains "YES" }
}

$des += dir -filter *. | where{
        (dir $_ -name) -contains "OK" -and (dir $_ -name) -contains "NO"
}

$src | foreach{
        if (test-path $_\YES)
        {
                ren $_\YES $_.parent.name
        }
}


$des | foreach{
        for ($i = (dir $_).count; $i -lt $num; $i++)
        {
                if ($src.count -gt 0)
                {
                        move $src[0] $_
                        #ren $_\YES $_.parent.name
                        $src.removeat(0)
                }
        }
}

TOP

本帖最后由 5i365 于 2022-2-13 11:09 编辑

回复 2# for_flr


    这个第5行前面是不是应该新建个数组? 这个不太理解, 我看前面 源 是先建了一个数组 [System.Collections.ArrayList]$src = @()
另外, 为什么 要$des+=直接$des=不行吗?
$des = @()
$des+=dir -filter *.|?{(dir $_ -name) -contains "OK" -and (dir $_ -name) -contains "NO"}

TOP

回复 5# for_flr


    终于搞定了, 删除上面红字的代码, 然后将最后的代码改为如下, 就可以了!
  1. $des | foreach{
  2. for ($i = (dir $_).count; $i -lt $num; $i++)
  3. {
  4. if ($src.count -gt 0)
  5. {
  6. move $src[0] $_
  7. $s = $src[0].name
  8. $s2 = $src[0].parent.name
  9. ren $_\$s\YES -newname $s2
  10. $src.removeat(0)
  11. }
  12. }
  13. }
复制代码

TOP

本帖最后由 5i365 于 2022-2-13 20:32 编辑

最终代码:
  1. cd Task3; $num = 6; [Collections.ArrayList]$src = @()
  2. $dir = gci -dir | where{
  3. (dir $_ -name) -contains "OK" -and (dir $_ -name) -notcontains "NO"
  4. }
  5. $src += $dir | foreach{
  6. dir $_ -exclude OK |
  7. where{ (dir $_ -name) -contains "YES" }
  8. }
  9. $des = gci -dir | where{
  10. (dir $_ -name) -contains "OK" -and (dir $_ -name) -contains "NO"
  11. }
  12. $des | foreach{
  13. for ($i = (dir $_ -dir).count; $i -lt $num; $i++)
  14. {
  15. if ($src.count -gt 0)
  16. {
  17. move $src[0] $_
  18. $s = $src[0].name
  19. $s2 = $src[0].parent.name
  20. ren $_\$s\YES -newname $s2
  21. $src.removeat(0)
  22. }
  23. }
  24. }
复制代码

TOP

返回列表