我目前遇到批处理文件问题。我试图多次复制相同的图像以填充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的可用空间。
答案 0 :(得分:0)
首先尝试将所有内容复制到硬盘驱动器上的文件夹,然后移动该文件夹。我在硬盘上运行了这个文件,它运行得很好
答案 1 :(得分:0)
如果sd卡被格式化为fat(fat16),你不能在文件夹中放置超过65534个文件,但根文件夹的限制为512个文件。
如果格式化为fat32,则目录没有文件限制。
但在任何一种情况下,群集大小都会影响文件的分配。来自microsoft文档
FAT16可以浪费大型驱动器中的文件存储空间作为大小 集群增加。分配用于存储文件的空间基于 群集分配粒度的大小,而不是文件大小。一个 存储在32 KB群集中的10 KB文件会浪费22 KB的磁盘空间。
FAT32比FAT16更有效地使用空间。 FAT32使用较小 集群(驱动器最大为8 GB,4 KB),占10%到15% 相对于大型FAT16驱动器,可以更有效地使用磁盘空间。 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
答案 2 :(得分:0)
不要将它们复制到根目录。在名为1
的根目录中创建一个目录,并将所有文件复制到该目录中。如果您使用具有相同大小或分配单位倍数的文件,它仍会覆盖所有扇区。
请注意,填写驱动器存储扇区不一定会清除所有旧文件名的文件表。