我正在处理一个基本的.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(
我哪里错了? 感谢
答案 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%
变量都可以提供更大的灵活性。
为清楚起见,我在关键字中使用大写字母,在变量中使用小写字母,但是无论哪种方式都应区分大小写。