0

im working on a basic .bat file. It checks if various files exists and if they dont, it will write "ERROR" in the log file. I then test this log file for the string "ERROR" and if it does I want to rename my log file, but i seem to be getting an error on my if statement. Heres my code..

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
)

I get a error -

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

Where am i going wrong? Thanks

4

3 回答 3

3

try this:

@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
)
于 2013-07-05T11:45:19.277 回答
1
if %ERRORLEVEL% 1 (

应该

if ERRORLEVEL 1 (

而且,由于您是在重新输入错误而不是复制粘贴,请注意在 the1和 the之间必须有一个空格(

错误之所以出现是因为批处理将任何 %var% 替换为其当时的值(当它被“解析”时)然后执行该行,因此批处理替换%errorlevel%了您的调试语句中报告的任何内容:)(例如1)和然后勇敢地尝试找出什么if 1 1 (意思。

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

这似乎是多余的,删除然后替换引号,但是如果您以后决定将语句更改为if exist %file% (它,那么只有稍后您会发现当 %file% 包含空格时您会崩溃。最好时刻注意文件名中的空格问题;如果你把引用变成一种习惯,你就会被抓到的次数减少。)

于 2013-07-05T15:01:37.953 回答
0

这两种语法略有不同:

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

IF ERRORLEVEL 1

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

IF %errorlevel% NEQ 0

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

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

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

于 2019-12-09T16:53:42.130 回答