我正在尝试设置一个批处理脚本,该脚本可以连接到一组服务器并执行启动脚本。由于密码被保存在commands.txt文件中。在远程服务器上执行启动后,我需要将其删除。但是,该del命令会在所有操作之前执行,这会导致循环问题,并导致缺少command.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}
答案 0 :(得分:1)
您的CMD脚本中存在一些问题,但是最具体地说,正如我在上面提到的那样,您没有在路径两边加上双引号。
此外,您在bat文件的所有行的末尾添加了空格,但这将导致您收集错误的PW,并且您也没有在事发后删除您的temp 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%"
我还更改了您选择的颜色,很难理解“明亮”右边的“明亮黄色”,我在“明亮红色”上使用了“明亮白色”。哦,我还向您的第二个脚本中添加了“回声关闭”功能,因为再次在其中添加所有多余的内容并没有帮助
我也查看了一下,发现您不会将PW保存在PW文件中,因此我通过使用%%进行了修复,以使第一个%被剥离。