【问题标题】:Batch to move files based on total size根据总大小批量移动文件
【发布时间】:2021-10-23 16:23:09
【问题描述】:

我在一个特定文件夹中有 900k 个文件,我需要根据 100 mbs 的总大小每天将它们移动到另一个文件夹。我试过下面的代码,但它移动了 100 个文件,而不是 100 mbs 的总量

@echo on

set Source=C:\Users\%Username%\Desktop\Dropbox\Pre
set Target=C:\Users\%Username%\Desktop\Dropbox\Pos

set MaxLimit=10

for /f "tokens=1* delims=[]" %%G in ('dir /A-D /B "%Source%\*.*" ^| find /v /n ""') do (
move /y "%Source%\%%~nxH" "%Target%"
if %%G==%MaxLimit% exit /b 0
)

pause

我需要批处理来移动它们大小总和小于或等于 10 kbs 的文件上的选择。如果我手动选择组成 100 mbs 的 N 个文件,基本上也是这样做的。 我相信它不起作用,因为它只检查单个文件的大小。

【问题讨论】:

  • 您为执行您在问题中提出的任务而编写的代码在哪里?我们不是来为你写的!我们的目的是帮助您解决您提交的代码的特定且可重现的问题,正如您告诉我们您的代码有效,我们没有什么需要解决的。因此,您的问题是期望有人为您编写代码,或执行搜索,并为您找到类似的答案。不幸的是,这不是本网站的目的,并且由于您不是全新的帐户持有人,因此您应该了解更多。请阅读How to Ask 更新您的知识。
  • 谢谢,我已经用我尝试过的代码和结果编辑了帖子
  • 这真的不够好!我看不到你有一个没有扩展名的文件,在C:\Users\%Username%\Desktop\Dropbox\Pre 中命名为10。您绝对没有尝试确定任何单个文件的大小,也没有执行任何运行总计算或任何接近您要求的操作。我们希望您在任务中做出合理的尝试,并且由于使用 [batch-file] 标签在本网站上肯定有类似的问题和答案,您当然需要使用页面顶部的搜索引擎,以协助您进行该尝试。

标签: windows batch-file cmd move


【解决方案1】:

基本问题是您必须跟踪复制了多少数据并检查它是否超过 MaxLimit。这在 PowerShell 中并不难。此脚本将最多复制 $MaxLimit 个字节到 $TargetDir。此脚本需要 PowerShell Core 6+。 https://github.com/PowerShell/PowerShell 的当前稳定版本是 7.1.5。这可以通过更改 Join-Path 语句与旧的 Windows PowerShell 5.1 一起使用。

将这两 (2) 个文件放在同一目录中。当您确信正确的文件将被复制到正确的目录时,请从 Move-Item 命令中删除 -WhatIf

=== Move-PictureBatch.bat

@pwsh -NoLogo -NoProfile -File "%~dp0Move-PictureBatch.ps1"

=== Move-PictureBatch.ps1

#Requires -Version 6
$MaxLimit = 100MB
$SourceDir = Join-Path -Path $Env:USERPROFILE -ChildPath 'Desktop' -AdditionalChildPath 'Pre'
$TargetDir = Join-Path -Path $Env:USERPROFILE -ChildPath 'Desktop' -AdditionalChildPath 'Pos'
$CurrentSize = 0

Get-ChildItem -File -Path $SourceDir |
    ForEach-Object {
        if (($CurrentSize + $_.Length) -lt $MaxLimit) {
            Move-Item -Path $_.FullName -Destination $TargetDir -WhatIf
            $CurrentSize += $_.Length
        } else {
            break
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2021-01-14
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2014-07-07
    • 2020-08-31
    相关资源
    最近更新 更多