专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 其他开发语言

bat函数的返回值解决方案

发布时间:2011-06-30 07:21:45 文章来源:www.iduyao.cn 采编人员:星星草
bat函数的返回值

set /a nFileSize=0
(
call :getFileSize D:\test1\sendszl2data\20111031\SZSEL2-20111031.tar.gz
echo %nFileSize%
)

(
call :getFileSize D:\test1\sendszl2data\20111031\SZSEL2-20111031.tar.gz
echo %nFileSize%
)

pause


:获取指定文件的大小
:getFileSize
@echo off
set strFilePath=%1%
set /a nFileSize=0
for /f "delims=" %%i in ('dir  %strFilePath% /s/b') do set /a nFileSize=%%~zi
echo %nFileSize%
goto :EOF


这是test.bat

运行结果:
D:\test1\sendszl2data>set /a nFileSize=0

D:\test1\sendszl2data>(
call :getFileSize D:\test1\sendszl2data\20111031\SZSEL2-20111031.tar.gz
 echo 0
)
552814
0
552814
552814
请按任意键继续. . .

为什么第1次的结果不对啊?

bat

------解决方案--------------------
引用:
怎么没人啊 自己顶一下

是这样的:
(
call :getFileSize D:\test1\sendszl2data\20111031\SZSEL2-20111031.tar.gz 
echo %nFileSize% 

批处理的解释器每次读入一个逻辑块,进行解析,其中包括变量替换。
一个逻辑块包括包含一个语句的一行命令,或者一个for语句,或者一个括号内语句,或者别的我不可能列举全。
你上面的代码包在一个括号中,因此解释器一次性读入它,并且将%nFileSize%进行替换,此时它的值是0(注意此时读进去的语句还没有开始执行,所以%nFileSize%的值是0),那么echo出来的就是0

解决办法是使用变量延迟:


set /a nFileSize=0
SETLOCAL EnableDelayedExpansion 
(
call :getFileSize D:\test1\sendszl2data\20111031\SZSEL2-20111031.tar.gz
echo !nFileSize!
)

(
call :getFileSize D:\test1\sendszl2data\20111031\SZSEL2-20111031.tar.gz
echo !nFileSize!
)

pause


:获取指定文件的大小
:getFileSize
@echo off
set strFilePath=%1%
set /a nFileSize=0
for /f "delims=" %%i in ('dir  %strFilePath% /s/b') do set /a nFileSize=%%~zi
echo %nFileSize%
goto :EOF
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: