比较批处理文件中相同文件的大小

时间:2018-08-29 13:47:20

标签: batch-file

我有1个任务,其中有1个文件开始通过DB生成,并且花了将近1个小时来生成,有1个批处理文件,只要有可用,它就会检查该文件,它会调用新的批处理文件并触发“文件已发送”,问题在于,该连续生成的文件在选择相同文件并调用批处理文件时并未完全生成

我想做些什么来构建逻辑,以便可以比较2个变量sizeA和sizeB在循环中的文件大小,并在sizeA == sizeB时调用另一个批处理文件,现在唯一的问题是我不确定如何在代码中构建此逻辑。\

这是我尝试过的:

@echo off
setlocal EnableDelayedExpansion
set file = "C:\Users\rb54761\Desktop\New folder\File.txt"
set "size=0"
pause
:loop for /f "tokens=*" %%x in ('dir /s /a /b "%file%"2^>nul') do set /a size=%%~zx
echo !size!
PAUSE
if !size! == !size! goto call
goto loop 
:call echo Success

3 个答案:

答案 0 :(得分:0)

EDIT 我现在只看到您的评论是2gb文件,因此下面的代码将不起作用。

如果文件较小。.这是一个示例:

@echo off
set "myfile=C:\Users\rb54761\Desktop\New folder\File.txt"
:start
for /f %%I in ("%myfile%") do set size=%%~zI
if %size% LSS 100 (echo file not ready %size% & timeout /t 10 & goto :start)
echo copy file.
按照上面的

,它将检查文件的大小为100kb,如果尚未达到该大小,它将超时10秒钟,并重新开始,然后再次测试,直到文件达到100kb,不再符合文件大小if语句并通过该行并仅回显copy file

请注意,我的set命令中没有空格。我建议您从cmd帮助for /?中运行,以获取有关此命令的更多信息。

答案 1 :(得分:0)

我们可以使用以下方法在一段时间内比较同一文件的大小

@echo off
setlocal EnableDelayedExpansion
set file="d:\File_Mask1\New_File\File.txt"
set "size=0"

If exist %file% GOTO loop
GOTO nofile

:loop
for /f "tokens=*" %%x in ('dir /s /a /b %file%') do set /a size=%%~zx
echo !size!

waitfor SomethingThatIsNeverHappening /T 120 >nul 2>&1

for /f "tokens=*" %%y in ('dir /s /a /b %file%') do set /a size1=%%~zy
echo !size1!
if !size! EQU !size1! goto call
goto loop

:call
echo Success
endlocal

答案 2 :(得分:0)

这利用了archive属性。 Windows每次写入文件时都会设置此属性。 因此,如果我们可以取消设置它,请等待一段时间并检查它(我使用<div itemscope itemtype="http://schema.org/Event"> ... <div style='display: none;' itemprop="location" itemscope itemtype="https://schema.org/Place"> <meta itemprop="name" content="Location Name"> <meta itemprop="url" content="https://example-location.com"> </div> </div> ,当未设置属性时,它将找不到文件)

dir /aa

(注意:您的@echo off set sec=10 set "file="C:\Users\rb54761\Desktop\New folder\File.txt"" set /a secs=sec+1 :loop attrib -a "%file%" timeout %sec% >nul dir /b /aa "%file%" >nul 2>&1 || goto :loop echo %file% didn't change since %secs% seconds 行是错误的。set file = ...周围的空格将成为变量名的一部分,分别是值)

优点:没有文件大小限制(大于2GB的文件也可以处理)