после борьбы в течение 2 дней я все еще не смог найти решение моей проблемы с пакетным скриптом Windows.
то, что я хочу сделать, это прочитать html-файл построчно, и если соответствующее ключевое слово найдено в определенной строке, то заменить эту строку чем-то (теги html и комбинация переменных)
Что бы я ни делал, я всегда получаю сообщение об ошибке «‹ ожидалось в это время» всякий раз, когда я пытаюсь добавить теги html в файл. Похоже, пакетный скрипт не любит html.
Вот мой код:
скрипт.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"
вывод.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
шаблон.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