我想有哪些检查什么的批处理文件filesize
是文件的。
如果它比更大%somany% kbytes,
它应该GOTO重定向到别的地方去。
例:
[check for filesize]
IF %file% [filesize thing Bigger than] GOTO No
echo Great! Your filesize is smaller than %somany% kbytes.
pause
exit
:no
echo Um... You have a big filesize.
pause
exit
Answer 1:
如果文件名作为参数传递给批处理文件,你需要的是%~z1
(1表示第一个参数)
如果文件名不是一个参数,你可以这样做:
@echo off
setlocal
set file="test.cmd"
set maxbytesize=1000
FOR /F "usebackq" %%A IN ('%file%') DO set size=%%~zA
if %size% LSS %maxbytesize% (
echo.File is ^< %maxbytesize% bytes
) ELSE (
echo.File is ^>= %maxbytesize% bytes
)
Answer 2:
我喜欢@Anders答案,因为在%〜Z1的秘密武器的说明。 然而,正如指出的那样,只有当文件名作为第一个参数传递给批处理文件传递工作。
@Anders工作围绕这通过使用FOR
,这是一个伟大的1班轮修复的问题,但是,它有点难以阅读。
取而代之的是,我们可以通过回用%〜Z1答案更简单CALL
。 如果您存储在一个环境变量的文件名,如果你把它作为一个参数,在批处理文件的程序就会变得%1:
@echo off
setlocal
set file=test.cmd
set maxbytesize=1000
call :setsize %file%
if %size% lss %maxbytesize% (
echo File is less than %maxbytesize% bytes
) else (
echo File is greater than %maxbytesize% bytes
)
goto :eof
:setsize
set size=%~z1
goto :eof
Answer 3:
%~z1
扩展为第一个参数批处理文件的大小。 看到
C:\> call /?
和
C:\> if /?
简单的例子:
@ECHO OFF
SET SIZELIMIT=1000
SET FILESIZE=%~z1
IF %FILESIZE% GTR %SIZELIMIT% Goto No
ECHO Great! Your filesize is smaller than %SIZELIMIT% kbytes.
PAUSE
GOTO :EOF
:No
ECHO Um ... You have a big filesize.
PAUSE
GOTO :EOF
Answer 4:
我喜欢使用DOS功能。 感觉清洁剂给我。
SET SIZELIMIT=1000
CALL :FileSize %1 FileSize
IF %FileSize% GTR %SIZELIMIT% Echo Large file
GOTO :EOF
:FileSize
SET %~2=%~z1
GOTO :EOF
Answer 5:
如果您%file%
是输入参数,你可以使用%~zN
,其中N
是参数的数量。
例如, test.bat
含
@echo %~z1
将显示第一个参数的大小,因此,如果您使用“ test myFile.txt
”会显示相应的文件的大小。
Answer 6:
像往常一样,VBScript是可供您使用.....
Set objFS = CreateObject("Scripting.FileSystemObject")
Set wshArgs = WScript.Arguments
strFile = wshArgs(0)
WScript.Echo objFS.GetFile(strFile).Size & " bytes"
除filesize.vbs
并在命令行输入:
C:\test>cscript /nologo filesize.vbs file.txt
79 bytes
使用for
循环(批量)得到返回结果。
Answer 7:
另一个例子
FOR %I in (file1.txt) do @ECHO %~zI
Answer 8:
创建一个在线批处理文件GetFileSize.bat含
GetFileSize=%~z1
然后调用它
call GetFileSize myfile.txt
if (%GetFileSize) == () goto No_File
if (%GetFileSize) == (0) goto No_Data
if (%GetFileSize) GTR 1000 goto Too_Much_Data
rem Etc.
你甚至可以在飞行中创建测试文件,以消除讨厌的必需的文件,请注意在echo语句双百分比:
echo set GetFileSize=%%~z1 > %temp%\GetFileSize.bat
call %temp%\GetFileSize myfile.txt
if (%GetFileSize) GTR 1000 goto Too_Much_Data
rem etc
这后一种解决方案是antispaghetti。 很好。 然而,更多的磁盘写操作。 检查使用计数。
Answer 9:
刚看到这个老问题想看看是否有的Windows内置的一些东西。在〜Z的事情是我不知道,但并不适用于我。 我结束了一个Perl一行代码:
@echo off
set yourfile=output.txt
set maxsize=10000
perl -e "-s $ENV{yourfile} > $ENV{maxsize} ? exit 1 : exit 0"
rem if %errorlevel%. equ 1. goto abort
if errorlevel 1 goto abort
echo OK!
exit /b 0
:abort
echo Bad!
exit /b 1
Answer 10:
这是我的评价文件的大小,而不使用VB / perl的/等解决方案。 和使用本机窗口shell命令粘:
FOR /F "tokens=4 delims= " %%i in ('dir /-C %temp% ^| find /i "filename.txt"') do (
IF %%i GTR 1000000 (
echo filename.txt filesize is greater than 1000000
) ELSE (
echo filename.txt filesize is less than 1000000
)
)
不干净的解决方案,但它能够完成任务。
Answer 11:
经过几次“尝试和测试”重复我已经找到一种方法(还没有出现在这里)来获取文件的大小,循环变量(不是命令行参数):
for %%i in (*.txt) do (
echo %%~z%i
)
Answer 12:
需要注意的是批量的限INT32:“无效号码。 数被限制在精度32位的“。
试试下面的语句:
IF 2147483647 GTR 2147483646 echo A is greater than B (will be TRUE)
IF 2147483648 GTR 2147483647 echo A is greater than B (will be FALSE!)
任何数量超过最大INT32值会破坏脚本越大! 看到如文件大小以字节为单位,该脚本将支持约255.9999997615814 MB的最大文件大小!
Answer 13:
只是一个想法:
您可以通过运行指令“dir”获得文件大小:
>dir thing
然后再返回这么多东西。
也许你可以从那里,如果你寻找它得到它。
但我不知道。
文章来源: How can I check the size of a file in a Windows batch script?