|
jipinkuang
新手上路
积分 11
发帖 7
注册 2008-9-5
状态 离线
|
『楼 主』:
[求助]errorlevel的问题
main这段代码,在XP下运行是无错的,但是在Windows NT下,
set /p file=<"%LogPath%\filelist.txt"
这里是不能获得 filelist.txt 里的第一行 并赋值给%file%的
所以,
在 下 Windows NT 取文本第一行的时,我改成了使用 For :
for /f "tokens=1* delims=:" %%i in ('findstr /n . "%LogPath%\filelist.txt"') do set _%%i=%%j&if "%%i"=="1"
goto nnext
:nnext
set file=%_1%
来获取文本第一行。
这样做,脚本在XP 和 NT下都能运行,
但是发现这样做的 结果是导致,后面
findstr /C:"%file%" ftpres.txt
时,不管ftpres.txt中是否有 %file%,返回的 %errorlevel%都是 1,就是说不管怎样,都判定为不成功。
写成if errorlevel 1也无济于事
希望那位大哥能帮忙解决!~ 谢谢!~~~~~~
也尝试了使用
type "ftpres.txt"| find "%file%" && goto ... 来判断在ftpres.txt中是否存在 %file%
与上面返回一样的结果,都是判定为不成功
另,在windows NT 下 %date%%time%都无效,希望那位告知NT里的系统日期和 时间变量
@echo on
::=============================================================
:: Parameter definition
::-------------------------------------------------------------
rem Path set
::-------------------------------------------------------------
set ProgPath=%CD%
set DataPath=e:\localpath
set BackPath=e:\backup1
set TempPath=%DataPath%\temp
set MputPath=%DataPath%\mput
set LogPath=%ProgPath%\log
::-------------------------------------------------------------
rem Data FTP server information set
::-------------------------------------------------------------
set DFtpserv=127.0.0.1
set DFtpuser=EPROPRG
set DFtppwd=eproprg
set DFtppath=\
::-------------------------------------------------------------
rem Log FTP server information set
::-------------------------------------------------------------
set LFtpserv=172.16.15.170
set LFtpuser=xiewf
set LFtppwd=a154122529
set LFtppath=\LOG
::=============================================================
:: FTP information generated
::-------------------------------------------------------------
rem Datalog FTP information generated
::-------------------------------------------------------------
>dftp.ini echo open %DFtpserv%
>>dftp.ini echo %DFtpuser%
>>dftp.ini echo %DFtppwd%
>>dftp.ini echo cd "%DFtppath%"
>>dftp.ini echo lcd "%MputPath%"
>>dftp.ini echo mput *.*
>>dftp.ini echo bye
::-------------------------------------------------------------
rem Log FTP information generated
::-------------------------------------------------------------
>lftp.ini echo open %LFtpserv%
>>lftp.ini echo %LFtpuser%
>>lftp.ini echo %LFtppwd%
>>lftp.ini echo cd "%LFtppath%"
>>lftp.ini echo lcd "%LogPath%"
>>lftp.ini echo mput *.log
>>lftp.ini echo bye
::=============================================================
:: Main script
::-------------------------------------------------------------
rem Check directory
::-------------------------------------------------------------
if not exist "%DataPath%" md "%DataPath%"
if not exist "%BackPath%" md "%BackPath%"
if not exist "%TempPath%" md "%TempPath%"
if not exist "%MputPath%" md "%MputPath%"
if not exist "%LogPath%" md "%LogPath%"
::-------------------------------------------------------------
rem Datalog dump
::-------------------------------------------------------------
>>"%LogPath%\dataput.log" echo.
>>"%LogPath%\dataput.log" echo -==-%date% %time%, Script running!!!-==-
>>"%LogPath%\dataput.log" echo *************DataLog began to dump*************
>>"%LogPath%\dataput.log" move "%DataPath%\*.*" "%TempPath%"
>>"%LogPath%\dataput.log" echo ************DataLog began to upload************
:Begin
::-------------------------------------------------------------
rem Check net
::-------------------------------------------------------------
ping -n 1 -w 1000 %DFtpserv%>nul
if "%errorlevel%"=="1" (
echo Error!!! %date% %time%,FTP server connection failure!>>"%LogPath%\dataput.log"
goto Error
) else (
echo.&& goto Next0
)
:Next0
::-------------------------------------------------------------
rem Access to upload file name,and check the results of upload
::-------------------------------------------------------------
>"%LogPath%\filelist.txt" dir /b "%TempPath%"
>>"%LogPath%\filelist.txt" echo nofile
set /p file=<"%LogPath%\filelist.txt"
if "%file%"=="nofile" (
echo.&& goto End
) else (
echo.&& goto Next1
)
:Next1
>>"%LogPath%\dataput.log" echo Start upload [%file%]
move "%TempPath%\%file%" "%MputPath%"
>ftpres.txt call ftp -i -s:dftp.ini
::-------------------------------------------------------------
rem Check the datalog has been upload,and backup it
::-------------------------------------------------------------
findstr /C:"%file%" ftpres.txt
if "%errorlevel%"=="1" (
echo Error!!! %date% %time%,[%file%] upload failure!>>"%LogPath%\dataput.log"
goto Error
) else (
echo.&& goto Next2
)
:Next2
ping -n 1 -w 1000 000>nul
if "%errorlevel%"=="1" (
echo %date% %time%,FTP server connection failure!Stop backup [%file%]>>"%LogPath%\dataput.log"
goto Error
) else (
echo.&& goto Next3
)
:Next3
echo %date% %time%,[%file%] Upload successful!!!>>"%LogPath%\dataput.log"
echo Backup [%file%] now!>>"%LogPath%\dataput.log"
move "%MputPath%\*.*" "%BackPath%"
goto Begin
:Error
>>"%LogPath%\dataput.log" echo -==-%date% %time%, Script ending!!-==-
del ftpres.txt
del dftp.ini
del lftp.ini
exit
:End
>>"%LogPath%\dataput.log" echo -==-%date% %time%, Script ending!!-==-
del ftpres.txt
del dftp.ini
del lftp.ini
exit
|
|
2009-3-7 01:22 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
|
2009-3-7 01:31 |
|
|
jipinkuang
新手上路
积分 11
发帖 7
注册 2008-9-5
状态 离线
|
『第
3 楼』:
for /f "tokens=1* delims=:" %%i in ('findstr /n . "%LogPath%\filelist.txt"') do set _%%i=%%j&if "%%i"=="1"
goto nnext
:nnext
set file=%_1% 为什么这样取第一行,下面
findstr /C:"%file%" ftpres.txt
返回的errorlevel都是1呢
|
|
2009-3-7 02:24 |
|
|
jipinkuang
新手上路
积分 11
发帖 7
注册 2008-9-5
状态 离线
|
『第
4 楼』:
Quote: | Originally posted by jipinkuang at 2009-3-7 01:22 AM:
main这段代码,在XP下运行是无错的,但是在Windows NT下,
set /p file=<"%LogPath%\filelist.txt"
这里是不能获得 filelist.txt 里的第一行 并赋值给%fi ... |
|
这段取不到第一行
|
|
2009-3-7 03:54 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
5 楼』:
for 动行后也有返回码的,所以该返回码不是findstr的,而是for 的
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-3-7 06:26 |
|
|
jipinkuang
新手上路
积分 11
发帖 7
注册 2008-9-5
状态 离线
|
『第
6 楼』:
那该如何让这个errorlevel变成findstr的呢
|
|
2009-3-7 07:54 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
7 楼』:
没有办法,但是如果输入文件为空时,file是不被赋值的呀,没有必要去理errorlevel的值的,方法在2楼
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-3-7 09:03 |
|
|
jipinkuang
新手上路
积分 11
发帖 7
注册 2008-9-5
状态 离线
|
『第
8 楼』:
errorlevel的问题,是在 findstr /C:"%file%" ftpres.txt 这里,
这个是我用来判断文件有没有上传的
如果上面用for来取第一行,那么,findstr的errorlevel永远都是 1,即上传不成功
还有,你的那段代码,%file%一直都是为空的
取不到,文件列表里的第一行
|
|
2009-3-7 09:53 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
|
2009-3-7 10:32 |
|