delete命令在for循环之前运行

时间:2019-07-11 17:34:26

标签: batch-file

我正在尝试设置一个批处理脚本,该脚本可以连接到一组服务器并执行启动脚本。由于密码被保存在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}

1 个答案:

答案 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文件中,因此我通过使用%%进行了修复,以使第一个%被剥离。