команда delete запускается перед циклом for - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь настроить пакетный скрипт, который может подключиться к набору серверов и выполнить стартовый скрипт.Поскольку пароль сохраняется в файле commands.txt.Мне нужно удалить его после выполнения запуска на удаленных серверах.Но эта команда del выполняется раньше всех, что вызывает проблемы в цикле и приводит к ошибкам из-за отсутствия файла commands.txt.Не уверен, как это выполняется перед циклом, когда его ставят после цикла.Как я могу это исправить?

Ниже приведен код, который я пытаюсь.

@echo off

Echo Please enter your password in the popup window and then press enter
set tempbat="%temp%\p.cmd"

REM Create temporary batch file to make popup window for entering password 'masked'
echo mode 20,1 >%tempbat%
echo color EF >>%tempbat%
echo Title Enter Password >>%tempbat%
echo setlocal enabledelayedexpansion >>%tempbat%
echo set /p Pass= >>%tempbat%
echo echo !pass!^>"%temp%\pass.txt" >>%tempbat%
echo exit >>%tempbat%
echo exit >>%tempbat%

 start /wait "" %tempbat%

 set /p Password=<"%temp%\pass.txt"
 @echo echo %password% ^| sudo -S -u x0ats echo startup.sh start>> 
 %cd%\commands.txt
 @echo read>> %cd%\commands.txt


 for /f "delims=" %%a in (%cd%\serverlist.txt) DO ( 

 Start PuTTY username@%%a -pw %password% -m "%cd%\commands.txt"


 )

 del %cd%\commands.txt}

1 Ответ

1 голос
/ 11 июля 2019

В вашем CMD-скрипте есть несколько проблем, но, в частности, как я уже упоминал выше, вы не ставите двойные кавычки вокруг путей.

Кроме того, вы добавляли пробелы в конце всей вашей строки в файле bat, но это заставит вас собирать неправильный PW, вы также не удалили временный файл bat или файл пароля после этого.

Кажется, что немного сложно пройти через всплывающее отдельное окно, вы можете отказаться от создания второго пакетного файла и вместо этого вызвать подфункцию, заставив свой сценарий поддерживать аргументы строки cmd.

В любом случае это должно работать больше, чем вы ожидаете:

@ECHO OFF

ECHO.Please enter your password in the popup window and then press enter
SET "_TempBat=%temp%\p.cmd"
SET "_PWFile=%temp%\pass.txt"
SET "_CMDs=%cd%commands.txt"

REM Create temporary batch file to make popup window for entering password 'masked'
ECHO.SETLOCAL>"%_TempBat%"
REM ECHO.ECHO OFF >"%_TempBat%"
ECHO.mode CON COLS=42 LINES=1 >"%_TempBat%"
ECHO.color CF>>"%_TempBat%"
ECHO.Title Enter Password >>"%_TempBat%"
ECHO.SET /p "_Pass=Enter Password: " >>"%_TempBat%"
ECHO.ECHO.%%_pass%%^>"%_PWFile%">>"%_TempBat%"
ECHO.exit>>"%_TempBat%"
ECHO.exit>>"%_TempBat%"


START /wait "" "%_TempBat%"
DEL /F /Q "%_TempBat%"

IF NOT EXIST "%_PWFile%" (
  "%_PWFile%" Not Created!
) ELSE (
  FOR /F "Tokens=*" %%A IN ('TYPE "%_PWFile%"') DO (
    SET "_PW=%%A"
    DEL /F /Q "%_PWFile%"
  )
)


 @ECHO.ECHO.%_PW% ^| sudo -S -u x0ats ECHO.startup.sh start>> "%_CMDs%"
 @ECHO.read>> "%_CMDs%"


for /f "delims=" %%a in ('Type "%_CMDs%"') DO ( 
  Start PuTTY username@%%a -pw %_PW% -m  "%_CMDs%"
)

Pause

DEL /F /Q "%_CMDs%"

ТАКЖЕ Я изменил цвета, которые вы выбрали Ярко-желтый, на Ярком справа трудно читается, я использовал Ярко-белый на Ярко-красном. о, и я также добавил Echo Off во второй сценарий, потому что опять же было бесполезно иметь там все лишние вещи

Также я посмотрел на это и заметил, что вы не собираетесь сохранять PW, сохраненные в файле PW, поэтому я исправил это с помощью %%, так что первый% будет удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...