首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 其他开发语言 >

bat函数的返回值解决方案

2013-10-11 
bat函数的返回值set /a nFileSize0(call :getFileSize D:\test1\sendszl2data\20111031\SZSEL2-20111031.

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

热点排行