1

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

到目前为止,我已经将 859 个 32kb 文件移动到标题为“32”的文件夹中,我对所有 431 个 64kb 文件、所有 91 个 96kb 文件、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"
4

1 回答 1

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

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

可以通过打开命令提示符并输入带有附加参数或作为命令帮助后的参数命令来读取命令帮助,例如/?for /?help for

于 2014-12-13T22:04:56.697 回答