中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-11 12:00
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]errorlevel的问题 查看 862 回复 8
楼 主 [求助]errorlevel的问题 发表于 2009-03-07 01:22 ·  中国 江苏 南通 联通
新手上路
积分 11
发帖 7
注册 2008-09-05 12:00
17年会员
UID 124871
性别 男
状态 离线
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
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%, 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 >>"%LogPath%\dataput.log"
goto Error
) else (
echo.&& goto Next3
)

:Next3
echo %date% %time%, Upload successful!!!>>"%LogPath%\dataput.log"
echo Backup 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
2 发表于 2009-03-07 01:31 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
取第一行:
set file=
for /f "delims=" %%i in ("%LogPath%\filelist.txt") do set file=%%i&goto :nnext
:nnext
if "%file%"=="" echo 没有file


[ Last edited by netbenton on 2009-3-7 at 07:04 ]
精简
=> 个人网志
3 发表于 2009-03-07 02:24 ·  中国 江苏 南通 联通
新手上路
积分 11
发帖 7
注册 2008-09-05 12:00
17年会员
UID 124871
性别 男
状态 离线
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呢
4 发表于 2009-03-07 03:54 ·  中国 江苏 南通 联通
新手上路
积分 11
发帖 7
注册 2008-09-05 12:00
17年会员
UID 124871
性别 男
状态 离线
Originally posted by jipinkuang at 2009-3-7 01:22 AM:
main这段代码,在XP下运行是无错的,但是在Windows NT下,

set /p file=<"%LogPath%\filelist.txt"

这里是不能获得 filelist.txt 里的第一行 并赋值给%fi ...

这段取不到第一行
5 发表于 2009-03-07 06:26 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
for 动行后也有返回码的,所以该返回码不是findstr的,而是for 的
精简
=> 个人网志
6 发表于 2009-03-07 07:54 ·  中国 江苏 南通 联通
新手上路
积分 11
发帖 7
注册 2008-09-05 12:00
17年会员
UID 124871
性别 男
状态 离线
那该如何让这个errorlevel变成findstr的呢
7 发表于 2009-03-07 09:03 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
没有办法,但是如果输入文件为空时,file是不被赋值的呀,没有必要去理errorlevel的值的,方法在2楼
精简
=> 个人网志
8 发表于 2009-03-07 09:53 ·  中国 江苏 南通 联通
新手上路
积分 11
发帖 7
注册 2008-09-05 12:00
17年会员
UID 124871
性别 男
状态 离线
errorlevel的问题,是在 findstr /C:"%file%" ftpres.txt 这里,
这个是我用来判断文件有没有上传的

如果上面用for来取第一行,那么,findstr的errorlevel永远都是 1,即上传不成功

还有,你的那段代码,%file%一直都是为空的

取不到,文件列表里的第一行
9 不好意思,改成这样,可以了 发表于 2009-03-07 10:32 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
set file=
for /f "delims=" %%i in (‘type "%LogPath%\filelist.txt"') do set file=%%i&goto :nnext
:nnext
if "%file%"=="" echo 没有file
精简
=> 个人网志
论坛跳转: