след като се мъчих в продължение на 2 дни, все още не успях да намеря решение на проблема си с пакетния скрипт на Windows.
това, което искам да направя, е да прочета html файла ред по ред и ако съвпадащата ключова дума бъде намерена в конкретен ред, след това да заменя този ред с нещо (HTML тагове и комбинация от променливи)
Каквото и да правя, винаги получавам някаква грешка „‹ се очаква в този момент“, когато се опитам да накарам html тагове към файла. Изглежда пакетният скрипт не харесва html.
Ето моят код:
script.bat
for /F "tokens=1,2,3,4,5,6,7" %%i in (output.txt) do call :process %%i %%j %%k %%l %%m %%n %%o
goto :sendreport
:: procedure to prepare report
:process
SETLOCAL EnableDelayedExpansion
set UBENAME=%1
set UBEVER=%2
set UBESTAT=%3
set RUNDATE=%4
set STARTTIME=%5
set ENDTIME=%6
set TOTALTIME=%7
SET FINDWHAT=%UBENAME%%UBEVER% :: letter to find in the file
SET REPLACEWITH=^<tr^>^<td^> %UBENAME% ^</td^>^<td^> %UBEVER% ^</td^>^<td^> %UBESTAT% ^</td^>^<td^> %RUNDATE% ^</td^>^<td^> %STARTTIME% ^</td^>^<td^> %ENDTIME% ^</td^>^<td^> %TOTALTIME% ^</td^>^</tr^>
SET FILE=template.html :: file to look in
FINDSTR %FINDWHAT% %FILE% >nul
IF %ERRORLEVEL% EQU 1 GOTO nowork
MOVE /Y "%FILE%" "%FILE%.bak"
FOR /F "USEBACKQ tokens=*" %%A IN (`TYPE "%FILE%.bak" ^|FIND /N /I "%FINDWHAT%"`) DO (
SET LINE=%%A
)
FOR /F "tokens=1,2* delims=]" %%S in ("%LINE%") DO SET LINE=%%S ::read file line by line
SET /A LINE=%LINE:~1,6%
SET /A COUNT=1
FOR /F "USEBACKQ tokens=*" %%A IN (`FIND /V "" ^<"%FILE%.bak"`) DO (
IF "!COUNT!" NEQ "%LINE%" (
ECHO %%A>>"%FILE%" :: if the matching string not found, write the line as it is
) ELSE (
ECHO %REPLACEWITH%>>"%FILE%" :: if found, replace the entire line with PROPVAL
)
SET /A COUNT+=1
)
GOTO end
:nowork
:end
)
:sendreport
echo "done"
output.txt
R560359C BA0001 Done 113121 24046 113121 24047
R560902C BAS0006 Done 113121 24647 113121 45726
R560902C BAS0005 Done 113121 24647 113121 45155
R560902C BAS0009 Done 113121 45754 113121 70022
template.html
<html>
<body>
<table>
<tr id='R560902CBAS0009'><td>R093021</td><td>BASJ1TNA</td><td>not_started</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr id='R6213G04BA0001'><td>R6213G04</td><td>BA0001</td><td>not_started</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr id='R560359BBA0001'><td>R560359B</td><td>BA0001</td><td>not_started</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr id='R560902CBAS0006'><td>R560902C</td><td>BAS0006</td><td>not_started</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr id='R560902CBAS0005'><td>R560902C</td><td>BAS0005</td><td>not_started</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr id='R560359CBA0001'><td>R560902C</td><td>BAS0009</td><td>not_started</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
</table>
</body>
</html>
FOR /F "USEBACKQ tokens=*" %%A IN (
FIND /V ^‹%FILE%.bak) DO (
... Опитвам се да разбера какво не е наред... - person kokbira   schedule 02.05.2013FIND /V "" ^<"%FILE%.bak"
има същите ефекти катоFIND /V "" "%FILE%.bak"
... - person kokbira   schedule 02.05.2013FOR /F "USEBACKQ tokens=*" %%A IN (
FIND /V %FILE%.bak) DO echo.%%A
, той се изпълнява, показвайки грешка в цикълаfor
... - person kokbira   schedule 02.05.2013!
, когато използватеSETLOCAL EnableDelayedExpansion
. Мисля, че това беше проблемът... - person kokbira   schedule 02.05.2013