0

我目前的批处理文件有问题。我试图多次复制相同的图像以填充 SD 卡。这样做的目的是写入文件以填充 SD 卡,以便我可以查看在复制之前已删除的项目是否可以恢复。自动化这个过程将使我能够更快地完成我的项目并减少复制文件的时间。

@echo off
setlocal enableDelayedExpansion

REM counts from 0 to count, so 8 = 9 copies
set count=16000

set filename_1=image

set extension=.jpeg

set start_1=

set source=%filename_1%%start_1%%extension%

for /L %%i in (0, 1, %count%) do (
  set /a "number_1=start_1+%%i"
  set destination=%filename_1%!number_1!%extension%
  echo !destination!
  copy %source% !destination!
)

pause

这是我当前的批处理文件,但由于某种原因在 246 份副本后失败。任何人有任何解释为什么它只会复制那个次数?运行完成后仍有 1.5GB 的可用空间。

4

3 回答 3

0

尝试先将所有内容复制到硬盘驱动器上的文件夹,然后移动该文件夹。我在硬盘驱动器上运行了这个文件,它运行良好

于 2013-10-24T14:53:49.907 回答
0

如果sd卡格式化为fat(fat16),一个文件夹不能放超过65534个文件,但是根文件夹有512个文件的限制。

如果它被格式化为 fat32,目录没有文件限制。

但无论哪种情况,簇大小都会影响文件的分配。来自微软文档

随着群集大小的增加,FAT16 会浪费较大驱动器中的文件存储空间。为存储文件分配的空间基于集群分配粒度的大小,而不是文件大小。存储在 32 KB 集群中的 10 KB 文件会浪费 22 KB 磁盘空间。

FAT32 比 FAT16 更有效地使用空间。FAT32 使用较小的集群(最大 8 GB 的驱动器为 4 KB),与大型 FAT16 驱动器相比,磁盘空间的使用效率提高了 10% 到 15%。FAT32 还减少了计算机运行所需的资源。

检查你的文件系统

编辑

测试/调整这个批处理文件。它将在磁盘中生成一个 32kb 的文件,然后对其进行复制,直到复制命令失败。

@echo off

    setlocal enableextensions enabledelayedexpansion

    set fillFileName=fillDisk%random%_
    set fillFileExtension=.dat
    set fillFile=%~dp0%fillFileName%%fillFileExtension%

    rem create a file to replicate to fill disk 
    call :createFile "%fillFile%"

    rem Let's fill the disk

    set fileCount=0
:loop
    rem do copy file
    copy "%fillFile%" "%~dp0%fillFileName%%fileCount%%fillFileExtension%" /y >nul 2>nul
    if errorlevel 1 (
        rem file copy failed.
        goto endProcess
    )

    rem copy ok - increment counter
    set /a fileCount=fileCount+1

    rem print indicator on console (show it is working)
    echo.|set /p=.

    rem go to do a new file copy
    goto loop

:endProcess

    rem show final information
    echo.
    echo [ %fileCount% ] files copied
    echo.

    rem disk filled - optional - delete all generated files
    del "%~dp0%fillFileName%*%fillFileExtension%"

    rem clean and exit
    endLocal
    exit /b

:createFile
    rem define a 2k buffer ( 32 * 2^6 )
    set fill=012345678901234567890123456789..
    for /L %%i in (1 1 6) do set fill=!fill!!fill!
    rem correction for crlf at end when output
    set fill=%fill:~0,-2%
    rem output buffer to indicated file (32 kb = 2kb * 16)
    (
        for /L %%i in (1 1 16) do echo %fill%
    ) > "%~1"
    set fill=
    goto :EOF
于 2013-10-24T16:04:23.070 回答
0

不要将它们复制到根目录。在名为的根目录中创建一个目录1并将所有文件复制到该目录中。如果您使用具有相同大小或多个分配单元的文件,它仍然会覆盖所有扇区。

请注意,填充驱动器存储扇区不一定会清除所有旧文件名的文件表。

于 2013-10-25T10:13:42.317 回答