【问题标题】:Getting a filesize in a batch file where the filename is known在已知文件名的批处理文件中获取文件大小
【发布时间】:2016-04-10 20:33:56
【问题描述】:

我正在尝试编写一个简单的批处理文件,让我可以比较两个文件大小,其中两个文件名都是已知的,并在批处理文件本身中设置。

但事实证明,仅仅获得一个文件大小是很困难的。这是复制问题的最小代码段:

IF EXIST "flava.jpg" (

  REM Get current filesize 
  FOR /F %%A in ("flava.jpg") DO SET _existingFileSize=%%~zA

  ECHO %_existingFileSize%

) ELSE (

  ECHO File not found.

)

从我读过的here 来看,它应该回显变量的内容。怎么回事?

【问题讨论】:

  • 请在上下文中显示代码。我相信您可能在code block(括号中的一系列语句)中有这个for 和以下echo - 请编辑您的问题以包含整个代码块(来自发起for 或@987654327 @到最后结束)
  • @Magoo 而不是压倒一切,我已经提出了仍然复制我遇到的问题的最小代码。 (在我的机器上测试过,仍然有同样的问题。)

标签: windows batch-file cmd filesize


【解决方案1】:
setlocal enabledelayedexpansion
IF EXIST "flava.jpg" (
  REM Get current filesize 
  FOR /F %%A in ("flava.jpg") DO SET _existingFileSize=%%~zA
  ECHO !_existingFileSize!
) ELSE (
  ECHO File not found.
)

IF EXIST "flava.jpg" (
  REM Get current filesize 
  FOR /F %%A in ("flava.jpg") DO SET _existingFileSize=%%~zA
  CALL ECHO %%_existingFileSize%%
) ELSE (
  ECHO File not found.
)

set "_existingfilesize="
FOR /F %%A in ("flava.jpg") DO SET _existingFileSize=%%~zA
if defined _existingfilesize (echo %_existingfilesize%) else (echo file not found)

问题是在块语句(a parenthesised series of statements) 中,整个块被解析并然后执行。块中的任何%var% 都将替换为该变量的值在解析块时 - 在块执行之前 - 同样适用于FOR ... DO (block)

因此,IF (something) else (somethingelse) 将在遇到IF 时使用%variables% 的值执行。

解决此问题的两种常见方法是 1) 使用 setlocal enabledelayedexpansion 并使用 !var! 代替 %var% 来访问 var 的更改值或 2) 调用子程序以使用改变了值。

因此请注意CALL ECHO %%var%% 的使用,它显示var 的更改值。 CALL ECHO %%errorlevel%% 显示,但遗憾的是 RESETS 错误级别。

【讨论】:

  • 极好的教育答案!足够的信息让我自己解决这个问题。非常感谢!
【解决方案2】:

试试这个打印一个或多个文件的文件大小。我制作了一个子程序,让编写复杂的代码块变得更加容易。如果您需要两个命名文件,请使用精确的 file 值。

@echo off
set file=*.bat
for %%A in (%file%) do call :DOIT %%A
goto :END

:DOIT
echo %1 size is %~z1
goto :EOF

:END
pause

【讨论】:

  • 不需要子程序。您可以改为%%~zA
  • @Joey 你能进一步解释一下吗?谢谢。我真的看不出我的代码有什么问题:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2016-01-18
相关资源
最近更新 更多