1.

Solve : Win/Batch: If then else related questionHi there,?

Answer»

Hi there,

I am going to use Dos/Batch with VBscript suggested from some guru in this forum to generate time stamp for text files. The partial codes are as follow: -

@echo off
IF EXIST "collect_*.TXT" (
echo Wscript.echo eval(WScript.Arguments(0))>"%cd%\evaluate.vbs"
For /f %%D in ( ' CSCRIPT //nologo "%cd%\evaluate.vbs" "day(date)" ' ) do set /a d=%%D
For /f %%M in ( ' cscript //nologo "%cd%\evaluate.vbs" "month(date)" ' ) do set /a m=%%M
For /f %%Y in ( ' cscript //nologo "%cd%\evaluate.vbs" "year(date)" ' ) do set /a yyyy=%%Y
del/q "%cd%\evaluate.vbs"
if %d% LSS 10 (set dd=0%d%) ELSE (set dd=%d%)
if %m% LSS 10 (set mm=0%m%) else (set mm=%m%)
set TimeStamp=%yyyy%-%mm%-%dd
) else (
echo.
echo no information collected!
)
echo.
pause
exit

However, the program does not run properly with following error mesages:

It gives an error message: ) was unexpected at this time.
for statement:
echo Wscript.echo eval(WScript.Arguments(0))>"%cd%\evaluate.vbs"

and it gives error message: 10 was unexpected at this time.
for the statements: if %d% LSS 10 (set dd=0%d%) else (set dd=%d%)
if %m% LSS 10 (set mm=0%m%) else (set mm=%m%)

Any idea about that?


Thanks,
ThomasI suspect it does not like nested IFs
I would fake it with GoTos

Code: [SELECT]@echo off
IF Not EXIST "collect_*.TXT" GoTo IfElse

echo Wscript.echo eval(WScript.Arguments(0))>"%cd%\evaluate.vbs"
For /f %%D in ( ' cscript //nologo "%cd%\evaluate.vbs" "day(date)" ' ) do set /a d=%%D
For /f %%M in ( ' cscript //nologo "%cd%\evaluate.vbs" "month(date)" ' ) do set /a m=%%M
For /f %%Y in ( ' cscript //nologo "%cd%\evaluate.vbs" "year(date)" ' ) do set /a yyyy=%%Y
del/q "%cd%\evaluate.vbs"
if %d% LSS 10 (set dd=0%d%) else (set dd=%d%)
if %m% LSS 10 (set mm=0%m%) else (set mm=%m%)
set TimeStamp=%yyyy%-%mm%-%dd
GoTo IfEnd

:IfElse
echo.
echo no information collected!
GoTo IfEnd

:IfEnd
echo.
pause
exit

Quote from: gpl on August 19, 2009, 09:32:10 AM

I suspect it does not like nested IFs
I would fake it with GoTos

I wrote the evaluate.vbs script some months AGO, under a different screen name.

Anyhow, you are partly right. Use of this parenthetical structure:

IF EXIST "collect_*.TXT" (
blah blah blah
) else (
blah blah blah
)

means that

1. the parentheses in this statement...

echo Wscript.echo eval(WScript.Arguments(0))>"%cd%\evaluate.vbs"

and these...

cscript //nologo "%cd%\evaluate.vbs" "day(date)"
cscript //nologo "%cd%\evaluate.vbs" "month(date)"
cscript //nologo "%cd%\evaluate.vbs" "year(date)"

...need escaping, ^(with carets^) and...

2. without delayed expansion the variables d, m and yyyy will be set to blanks and thus result in "not expected at this time" messages when you do LSS GTR EQU etc comparisons

So the idea of using gotos is a good one.

Here is my version

Code: [Select]@echo off

IF not EXIST "collect_*.TXT" goto noinfo

echo Wscript.echo eval(WScript.Arguments(0))>"%cd%\evaluate.vbs"
For /f %%D in ( ' cscript //nologo "%cd%\evaluate.vbs" "day(date)" ' ) do set /a d=%%D
For /f %%M in ( ' cscript //nologo "%cd%\evaluate.vbs" "month(date)" ' ) do set /a m=%%M
For /f %%Y in ( ' cscript //nologo "%cd%\evaluate.vbs" "year(date)" ' ) do set /a yyyy=%%Y
del/q "%cd%\evaluate.vbs"
if %d% LSS 10 (set dd=0%d%) else (set dd=%d%)
if %m% LSS 10 (set mm=0%m%) else (set mm=%m%)
set TimeStamp=%yyyy%-%mm%-%dd

:noinfo
echo.
echo no information collected!

echo.
pause
exit



Discussion

No Comment Found