Проблема с циклом пакетного файла - завершает пакетный файл

У меня проблема с командным файлом.

    @echo off

:START
echo Are you ready?

SET logpath=xxx

:COPY
pause
xxx

:FIRST
for /f %%g IN (hostnames.txt) do (
::xcopy "xxx*.*" \\%%g\c$\temp\ /f /s /y /i
echo PC %%g >> %logpath%\xxx
echo %%g > appname.txt

psexec -h \\%%g cmd /c msiexec /i xxx
IF '%ERRORLEVEL%'=='0' (
      echo xxx Success! >> %logpath%\xxx.txt
    ) else (
      echo xxx Error is %ERRORLEVEL%. >> %logpath%\xxx.txt
    )
psexec -h \\%%g cmd /c msiexec /i xxx
IF '%ERRORLEVEL%'=='0' (
      echo xxx Success! >> %logpath%\xxx.txt
    ) else (
      echo xxx Error is %ERRORLEVEL%. >> %logpath%\xxx.txt
    )


:SECOND
psexec -h \\%%g cmd /c  MsiExec.exe /I{xxx} /passive /norestart 
IF '%ERRORLEVEL%'=='0' (
      echo test {...-xxx} uninstalled! >> %logpath%\xxx.txt
      goto THIRD
    )

psexec -h \\%%g cmd /c  msiexec /x "{xxx}" /passive /norestart 
IF '%ERRORLEVEL%'=='0' (
      echo Pierwszy {...-xxx} uninstalled! >> %logpath%\xxx.txt
      goto THIRD
    )

    ::Like 15 times uninstalling different apps

:THIRD

for /f %%g in (appname.txt) do taskkill -s %%g -im xxx.exe -f
for /f %%g in (appname.txt) do psexec -h \\%%g cmd /c  msiexec /i xxx /passive /norestart
IF '%ERRORLEVEL%'=='0' (
      echo xxx Success! >> %logpath%\xxx.txt
    ) else (
      echo xxx. Error is %ERRORLEVEL%. >> %logpath%\xxx.txt
    )
for /f %%g in (appname.txt) do psexec -h \\%%g cmd /c regedit /s xxx.reg

for /f %%g in (appname.txt) do psexec -h \\%%g cmd /c del c:\temp\xxx\*.* /f /s /q

echo. >> %logpath%\xxx.txt
echo. >> %logpath%\xxx.txt

)

Сначала, как вы можете видеть в ТРЕТИМ разделе, мне нужно использовать for /f %%g in (appname.txt) do psexec -h вместо psexec -h, потому что psexec не работает и он «теряет» имя хоста, и это единственный обходной путь, который я нашел сам.

Во-вторых (самое важное), когда пакет работает до конца (до последнего ")"), он останавливается. Как и первый цикл, for завершился, и он не получает новое имя хоста из файла hostnames.txt.

Буду благодарен за любые идеи, как заставить работать

он называется enabledelayedexpansion попробуйте с cmd запустить setlocal /?

Gerhard 11.04.2018 13:21

Первое, что следует отметить, это то, что у вас есть несбалансированные круглые скобки, похоже, нет никакой причины для последней строки / символа! Следующее, что следует отметить, это явное отсутствие двойных кавычек во всем скрипте, их всего два набора, и один из них закомментирован. Похоже, вы тоже echo вставляете ненужные пробелы в свой файл журнала.

Compo 11.04.2018 13:25

Спасибо за ответ. Я добавил «setlocal enabledelayedexpansion» в начале и изменил «для / f %% g в (appname.txt) do psexec -h» на «psexec -h», но проблема все еще остается.

Seba S 11.04.2018 13:34

Не используйте двойные двоеточия для комментариев внутри блоков кода, заключенных в скобки.

Squashman 11.04.2018 14:43
0
4
55
0

Другие вопросы по теме