如何仅使用windows命令shell查找文件大小?

时间:2011-05-02 14:58:33

标签: windows command-line find dos filesize

我正在尝试编写一个脚本来检查文件的大小是否大于0,如果是,则打印“更大”。我看了this问题并得到了一些好主意。我试图实现第二个回答者回答的问题,但它没有正常工作。

这是我到目前为止所做的:

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 was unexpected at this time.

关于我做错了什么的任何想法? TIA!

5 个答案:

答案 0 :(得分:2)

尝试此命令:

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是文件大小,以字节为单位......

答案 1 :(得分:1)

如果要在for块内使用实际环境变量,则需要延迟扩展:

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!以触发延迟扩展而不是正常扩展。

问题是当语句解析时会扩展正常的环境变量;在这方面,for块是一个单一的声明。因此,一旦循环在之前从运行size的值,就会使用循环。

延迟扩展(使用!)将在执行之前扩展变量,而不是在解析语句时,因此您将在循环中看到更新的值。

答案 2 :(得分:1)

robocopy / L(dir你想要的大小)(C:\任意文件夹) / Log:(C:\ arbitrary folder \ robolog.txt)

那将创建一个具有大小的文档 findstr字节C:\ robocopylog.txt>> getsize.txt

你可以使用For /?帮助导航到getsize.txt的最后一个条目,该条目应该包含整个目录的大小。 你将不得不处理kil表示千兆字节是k还是g表格gig可以解决,因为robocopy使用0作为占位符所以你只需要得到最后一行的第3和第4个标记。 514.46米

答案 3 :(得分:0)

我不确定为什么会导致这个问题,但这段代码有效。

for %%i in (*.txt) do (
echo %%i %%~zi
echo %%~zi
if %%~zi GTR 0 echo greater
)

我认为这与%size%变量被替换和重置时有关。我仍然想用变量名替换%%~zi,但我想如果它有效,我会留下它。

答案 4 :(得分:0)

以下是在PowerShell中执行此操作的方法。我希望它能说服你升级到更现代的外壳:

PS C:\test> Get-ChildItem *.txt | ForEach-Object { Write-Host $_.name, $_.length }
test.txt 16
test2.txt 5