Den*_*man 59 batch-file filesize
我想要一个批处理文件来检查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
Run Code Online (Sandbox Code Playgroud)
And*_*ers 97
如果文件名用作批处理文件的参数,则只需要%~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
)
Run Code Online (Sandbox Code Playgroud)
Ste*_*uan 14
我喜欢@Anders的答案,因为%~z1秘密酱的解释.但是,正如所指出的那样,仅当文件名作为第一个参数传递给批处理文件时才有效.
@Anders通过使用来FOR
解决这个问题,这对问题来说是一个很好的一线解决方案,但是,它有点难以阅读.
相反,我们可以通过使用返回到%~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 or equal %maxbytesize% bytes
)
goto :eof
:setsize
set size=%~z1
goto :eof
Run Code Online (Sandbox Code Playgroud)
Sin*_*nür 11
%~z1
扩展为批处理文件的第一个参数的大小.看到
C:\> call /?
Run Code Online (Sandbox Code Playgroud)
和
C:\> if /?
Run Code Online (Sandbox Code Playgroud)
简单的例子:
@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
Run Code Online (Sandbox Code Playgroud)
小智 9
我更喜欢使用DOS功能.感觉更干净.
SET SIZELIMIT=1000
CALL :FileSize %1 FileSize
IF %FileSize% GTR %SIZELIMIT% Echo Large file
GOTO :EOF
:FileSize
SET %~2=%~z1
GOTO :EOF
Run Code Online (Sandbox Code Playgroud)
如果您%file%
是输入参数,则可以使用%~zN
,N
参数编号在哪里.
例如test.bat
含有
@echo %~z1
Run Code Online (Sandbox Code Playgroud)
将显示第一个参数的大小,因此如果使用" test myFile.txt
",它将显示相应文件的大小.