批处理文件,用于根据filesize移动文件

时间:2013-05-15 19:01:36

标签: batch-file

所以这让我有点恼火。我试图编写批处理文件,根据文件大小移动到自己的文件夹中。我已经开始手动执行此操作,但在30分钟后,我尝试了解如何制作.bat文件以减少几个小时的工作量。但是,我还没有在Google.com上找到任何帮助。通常情况下我会查看代码并对其进行编辑以便工作,但批处理对我来说仍然非常混乱,而且我还没有找到类似于我正在寻找的东西。

到目前为止,我已将859个32kb文件移动到文件夹标题" 32" 我对所有43个64kb文件,91个96kb文件中的91个,30个128kb文件,14个160kb文件,17个192kb文件,9个224kb文件,然后258kb-1376kb都做了同样的事情,每个都有大约4-5个再次指数增长到912mb,我停在640kb。

所以有一个模式,我只需要一个.bat代码将这些文件移动到以其文件大小命名的文件夹中。我想在另一种编码语言中,循环做我想要的东西看起来像这样,

dim strFS as String
strFS = "file".filesize
move "file" to /"strFS"

1 个答案:

答案 0 :(得分:0)

这样的文件移动可以通过以下评论批次完成:

@echo off
setlocal EnableDelayedExpansion
for %%F in (*) do (

    rem Divide file size by 32768
    set /A "BlockSize=%%~zF/32768"
    rem Calculate remainder of above division.
    set /A "Remainder=!BlockSize!*32678-%%~zF"
    rem Multiply result with 32 and round up to 32, 64, 96, 128, ...
    if "!Remainder!"=="0" ( set "Add=0" ) else ( set "Add=32" )
    set /A "FolderName=BlockSize*32+Add"

    rem Move the file to appropriate directory which fails if the
    rem directory does not already exist. In this case create the
    rem directory and execute move command once again.
    move "%%~nxF" !FolderName!\ 2>nul
    if errorlevel 1 (
        md !FolderName!
        if not errorlevel 1 (
            move "%%~nxF" !FolderName!
        ) else (
            echo Could not create directory !FolderName! for file %%~nxF
        )
    )
)
endlocal

批处理文件不能在当前的工作目录中,因为它会移动自己,这当然不是一个好主意。

帮助用于如果 md 移动设置 setlocal 可以通过打开命令提示符并输入附加参数/?的命令或输入命令 help 后的参数来读取,例如{{1} }或for /?

相关问题