我是制作批处理文件并遇到问题的新手。 我的计划是将文件的大小(以字节为单位)(未知文件名但使用固定扩展名)与一些“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。 希望能搞清楚。 再次感谢!
答案 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...
)