在文本文件中查找字符串,然后重命名我的日志文件

时间:2013-07-05 11:31:55

标签: windows if-statement batch-file cmd error-logging

我正在处理一个基本的.bat文件。 它检查是否存在各种文件,如果不存在,它将在日志文件中写入“ERROR”。 然后,我测试此日志文件中的字符串“ERROR”,如果它,我想重命名我的日志文件,但我似乎在我的if语句上收到错误。继承我的代码..

set "filename=C:\Temp\%COMPUTERNAME%.txt"
echo Creating .txt file...

echo Getting the Computer name...

echo %COMPUTERNAME% >> filename
echo ArcGIS Desktop 10 File checker
pause
echo Looking for files.....
call:checkFileExists C:\support\msi_local\Oracle10g\marker.txt
pause

FIND "ERROR" filename
echo error level is %ERRORLEVEL%
pause

if %ERRORLEVEL% 1 (
    set "newfileName=C:\Temp\%COMPUTERNAME%%_ERROR.txt"
    rename fileName newfileName
)
pause

:checkFileExists
if exist %~1 (
    echo Success %~1 does exist >> C:\Temp\%COMPUTERNAME%.txt
) else (
    echo ERROR "C:\support\msi_local\Oracle10g\marker.txt"%~1 does not exist >> C:\Temp\%COMPUTERNAME%.txt
)

我收到错误 -

The syntax of teh command is incorrect.
C:\Windows>if ERRORLEVEL 1(

我哪里错了? 感谢

3 个答案:

答案 0 :(得分:3)

试试这个:

@echo off &SETLOCAL 
set "filename=C:\Temp\%COMPUTERNAME%.txt"
echo Creating .txt file...

echo Getting the Computer name...

>>"%filename%" echo %COMPUTERNAME%
echo ArcGIS Desktop 10 File checker
pause
echo Looking for files.....
call:checkFileExists "C:\support\msi_local\Oracle10g\marker.txt"
pause

FIND "ERROR" "%filename%"
echo error level is %ERRORLEVEL%
pause

if %ERRORLEVEL% equ 1 (
     set "newfileName=C:\Temp\%COMPUTERNAME%_ERROR.txt"
     move "%fileName%" "%newfileName%"
)
pause

:checkFileExists
if exist "%~1" (
     echo Success %~1 does exist >> C:\Temp\%COMPUTERNAME%.txt
) else (
     echo ERROR "C:\support\msi_local\Oracle10g\marker.txt"%~1 does not exist >> C:\Temp\%COMPUTERNAME%.txt
)

答案 1 :(得分:1)

if %ERRORLEVEL% 1 (

应该是

if ERRORLEVEL 1 (

而且,由于您正在重新输入错误而不是复制粘贴,请注意1(

之间必须有空格

错误就是这样出现的,因为批处理将%var%替换为当时的值(当它被“解析”时),然后执行该行,因此批量替换已报告为%errorlevel%的任何内容debug statement :)(例如1)然后尝试勇敢地计算if 1 1 (的含义。

(顺便说一句,将if exist %~1 (替换为if exist "%~1" (

是个好主意

这似乎是多余的,删除然后替换引号,但是如果你以后决定将语句更改为if exist %file% (,那么只有在以后你会发现当%file%包含一个时你会崩溃空间。最好永远留意文件中的空间问题;如果你引用一个习惯,你就会不那么经常被抓住。 )

答案 2 :(得分:0)

两种语法略有不同:

旧语法(MS-DOS时代)-检查错误级别是否为1或更高:

IF ERRORLEVEL 1

新样式的语法-检查%errorlevel%变量是否不等于0:

IF %errorlevel% NEQ 0

请注意,新样式语法使用%表示变量,而旧样式语法使用ERRORLEVEL是特殊关键字。

应该首选新样式的语法,因为它将处理错误时返回-1的程序。如果程序成功返回负错误代码,则可以使用IF %errorlevel GEQ 1处理错误。无论哪种方式,使用%errorlevel%变量都可以提供更大的灵活性。

为清楚起见,我在关键字中使用大写字母,在变量中使用小写字母,但是无论哪种方式都应区分大小写。