эхо не пишет вывод в windows 2012 R2 - PullRequest
0 голосов
/ 17 октября 2019

У меня есть сценарий .cmd, который в основном выполняет массив команд в цикле for и записывает вывод в файл журнала, из которого мне нужно прочитать последнюю строку журнала и проверить, есть ли в нем строка «Finished» впоследняя строка, если строка не найдена, я не буду печатать «ошибка», иначе «сделано»

ВЫПУСК: Я запускаю этот точный код на моем компьютере с Windows10, он работает, как и ожидалось выше. Но когда это запускается в «windows 2012 R2» (мой служебный сервер), происходит даже тогда, когда последняя строка моего cmd [0] в файле журнала говорит «готово», вместо «готово» отображается «ошибка» !! !! 1005

ли это в основном означает, что ошибка не обнаружена должным образом из команды, он не умеет читать значение! lastline! ? или это проблема разницы между машинами для запуска сценариев .cmd.

setlocal EnableDelayedExpansion
SET cmd[0]=command1
SET cmd[1]=command2

setlocal EnableDelayedExpansion

SET /A "fail = 1"

for /F "tokens=2 delims==" %%s in ('set cmd[') do (

         if !fail! equ 1 (

            %%s >>%LOGFILE% 2>>&1 
            echo "ERROR LEVEL OF above command RUN IS %errorlevel%"

            if not %errorlevel%==0 (set errmsg=Unable to logon )

            echo "trying to read the lastline from the logfile"
            for /f "usebackq delims=" %%b in (%LOGFILE%) do set lastline=%%b

            echo !lastline! >> %LOGFILE%
            echo !lastline! | findstr /I /R /C:"Finished"   && (
            echo "done" )
            ) || (
            echo "error"
            )
         )
)      

После дальнейшей отладки этой проблемы на компьютере 2012R2 я редактирую заголовок этого вопроса и предоставляю дополнительные обновления:

Похоже, что настоящая проблема связана с echo Я говорю это, потому что, хотя echo! Lastline! записывает вывод в файл tmp.txt на моем компьютере с windows10, он не записывает вывод в файл tmp.txt, когда скрипт запускается через окнаМашина 2012R2.

Я подошел к той же проблеме с альтернативой, используя следующий код:

SetLocal EnableDelayedExpansion
SET cmd[0]=command1 
SET cmd[1]=command2

SetLocal EnableDelayedExpansion
@echo off


SET /A "fail = 1"
for /F "tokens=2 delims==" %%s in ('set cmd[') do (


    **del "C:\Program Files\Tabcmd\Command Line Utility\tmp.txt"**

         if !fail! equ 1 (

            %%s >>%LOGFILE% 2>>&1
            if not %errorlevel%==0 (set errmsg=Unable to logon  & goto Problem)

            echo "entering another for loop for checking last line"
            for /f "usebackq delims=" %%b in (%LOGFILE%) do set      lastline=%%b
            **echo !lastline!>tmp.txt**
            findstr "Finished refresh of extracts" tmp.txt  && (
            SET /A "fail = !fail! + 1"
            echo "done") || ( echo "error")              

)
...