批处理 - 多次检查文件大小

时间:2013-11-25 17:51:30

标签: batch-file filesize

我是制作批处理文件并遇到问题的新手。 我的计划是将文件的大小(以字节为单位)(未知文件名但使用固定扩展名)与一些“maxfilesizes”进行比较,并根据文件大小做不同的事情。

@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,因为如果filesize小于1500000000字节,我希望将文件拆分为15MB部分(回声将被命令替换)。因此 - >转到15MB。 希望能搞清楚。 再次感谢!

2 个答案:

答案 0 :(得分:1)

你可以直接消除大小的三个最后数字,将字节转换为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转换......

答案 1 :(得分:0)

以下是您可以执行的操作 - 如果您尝试从特定路径“扫描”(例如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...
)