批处理 - 多次检查文件大小
Posted
技术标签:
【中文标题】批处理 - 多次检查文件大小【英文标题】:Batch - multiple checks for file size 【发布时间】:2013-11-25 17:51:30 【问题描述】:我是制作批处理文件的新手,但遇到了问题。 我的计划是将文件(未知文件名但具有固定扩展名)的大小(以字节为单位)与一些“最大文件大小”进行比较,并根据文件的大小执行不同的操作。
@echo off
for /F %%a in ('dir /b *.bin') do set file=%%~na
:BEGIN
for %%X in (%file%.bin) do if %%~zX LSS 1500000000 goto 15MB
for %%X in (%file%.bin) do if %%~zX LSS 5000000000 goto 50MB
for %%X in (%file%.bin) do if %%~zX LSS 10000000000 goto 100MB
for %%X in (%file%.bin) do if %%~zX LSS 15000000000 goto 150MB
goto Error
:15MB
echo Less than 1500000000b. Do stuff here.. 15MB.
goto TheEnd
:50MB
echo Less than 5000000000b. Do stuff here.. 50MB.
goto TheEnd
:100MB
echo Less than 10000000000b. Do stuff here.. 100MB.
goto TheEnd
:150MB
echo Less than 15000000000b. Do stuff here.. 150MB.
goto TheEnd
:Error
echo File size greater than 14GB. Aborting..
:TheEnd
echo All done.
pause
我已经使用大约 8.000.000.000 字节的文件测试了这批文件,因此应该触发 ':100MB',但事实并非如此。 相反,我总是得到“文件大小大于 14GB”。中止..' 请记住,我是初学者,所以上述批次可能不是最有效的.. 任何帮助将不胜感激。
编辑: @Aacini 非常感谢,我刚刚用我的一些文件测试了你的代码,它完全符合我的要求。
[...] 但我认为您应该查看在字节中使用的数字 -> MB 转换...
这些不是转换。我只将它们用于 goto,因为如果文件大小小于 1500000000 字节,我希望将文件拆分为 15MB 的部分(回声将被命令替换)。因此 -> 转到 15MB。 希望清除它。 再次感谢!
【问题讨论】:
hm,请检查您从字节到兆字节和千兆字节的转换。 问题出在使用 for 命令时。它正在查看文件的内容,而不是文件本身 Andy T:我不认为字节有什么问题。 @Monacraft:当我这样做时 - for %%X in (%file%.bin) do echo %%~zX bytes - 它正确地回显了字节。你到底什么意思?如何更改 for 命令以便它查看文件本身? 您声明 15000000000 字节为 150MB(所有其他转换都相同)。请检查:google.co.uk/… 如果您假设每兆字节有一百万字节,那么 15 MB 将是 15,000,000 或 15000000。 【参考方案1】:你可以去掉size的最后三位,将字节转换为KB,相当于除以1000。如果你对MB的大小感兴趣,差异无关紧要:
@echo off
for %%a in (*.bin) do set fileSize=%%~Za
set fileSize=%fileSize:~0,-3%
:BEGIN
if %fileSize% LSS 1500000 goto 15MB
if %fileSize% LSS 5000000 goto 50MB
if %fileSize% LSS 10000000 goto 100MB
if %fileSize% LSS 15000000 goto 150MB
goto Error
您也可以通过这种方式进行比较:
:BEGIN
for %%a in (15 50 100 150) do if %fileSize% LSS %%a00000 goto %%aMB
goto Error
注意:以前的代码重复了您自己的行为,但我认为您应该查看您在字节中使用的数字 -> MB 转换...
【讨论】:
【参考方案2】:您可以执行以下操作 - 如果您尝试从特定路径“扫描”(例如 C:\Users\%username%*.extension),您可以使用以下命令“循环”遍历所有目录并您指定的子目录:
FOR /R "[Drive][Path][*]" %%A in ('*.extension') DO ECHO %%~nA
您可以将 %%~nA 替换为您要显示的信息类型(请记住,您必须在其中包含 ~%% 和 A。您可以更改 n。您还可以包含多个,例如%%~nxA)。 我希望这对您想要的有所帮助。如果您想做的不仅仅是 DO ECHO,您可以执行以下操作
DO ECHO (
echo %%~nA
echo %%~xA
echo Scanning...
)
【讨论】:
以上是关于批处理 - 多次检查文件大小的主要内容,如果未能解决你的问题,请参考以下文章