如何仅使用windows命令shell查找文件大小?
我正在尝试编写一个脚本,检查文件大小是否大于0,如果大于0,则打印“更大”。我看了这个问题,有了一些好主意。我试图实现第二个回答者的回答,但没有正常工作 这就是我到目前为止所做的:如何仅使用windows命令shell查找文件大小?,windows,batch-file,cmd,filesize,Windows,Batch File,Cmd,Filesize,我正在尝试编写一个脚本,检查文件大小是否大于0,如果大于0,则打印“更大”。我看了这个问题,有了一些好主意。我试图实现第二个回答者的回答,但没有正常工作 这就是我到目前为止所做的: for %%i in (*.txt) do ( set size=0 set /A size=%%~zi echo %%i %size% if %size% GTR 0 echo greater ) 当我尝试这个方法时,所有文件的大小都是一样的,尽管我知道其中一个文件是不同的。当我删除set size=0时,如果文
for %%i in (*.txt) do (
set size=0
set /A size=%%~zi
echo %%i %size%
if %size% GTR 0 echo greater
)
当我尝试这个方法时,所有文件的大小都是一样的,尽管我知道其中一个文件是不同的。当我删除set size=0
时,如果文件大小为0,则会出现错误0此时是意外的。
有没有关于我做错了什么的想法?我不知道为什么会出现问题,但这段代码起作用了
for %%i in (*.txt) do (
echo %%i %%~zi
echo %%~zi
if %%~zi GTR 0 echo greater
)
我认为这与%size%变量被替换和重置的时间有关。我仍然想用一个变量名替换%%~zi
,但如果它有效,我想我会保留它。试试这个命令:
for %%I in (*.txt) do @echo %%~znI
在Windows 7上运行此操作时,我得到以下结果:
C:\Users\Leniel\Desktop>for %I in (*.txt) do @echo %~znI
14 test1
34 test2
其中14和34是以字节为单位的文件大小…下面介绍如何在PowerShell中执行此操作。我希望它能说服您升级到更现代的外壳:
PS C:\test> Get-ChildItem *.txt | ForEach-Object { Write-Host $_.name, $_.length }
test.txt 16
test2.txt 5
如果要在
块的中使用实际环境变量,则需要延迟扩展:
setlocal enabledelayedexpansion
for %%i in (*.txt) do (
set size=0
set /A size=%%~zi
echo %%i !size!
if !size! GTR 0 echo greater
)
还请注意,您需要将%size%
替换为!尺寸
触发延迟扩展而不是正常扩展
问题是当解析语句时,普通的环境变量会被扩展;在这方面,
块的是一个单独的语句。因此,一旦循环运行了size
的值,就可以使用循环了
延迟扩展(使用!
)将在执行之前而不是在解析语句时扩展变量,以便您可以从循环中看到更新的值。robocy/L(您想要的大小的目录)(C:\arbitral folder)/日志:(C:\arbitral folder\robolog.txt)
将创建一个大小为
findstr字节C:\robocopylog.txt>>getsize.txt
您可以使用/?帮助导航到getsize.txt的最后一个条目,该条目应包含整个目录的大小。
你将不得不处理它是k代表千兆字节还是g代表千兆字节,这是可以解决的,因为robocopy使用0作为占位符,所以你只需要获得最后一行的第三和第四个令牌。514.46米