Batch file 在for循环之前运行delete命令

Batch file 在for循环之前运行delete命令,batch-file,Batch File,我正在尝试设置一个批处理脚本,它可以连接到一组服务器并执行启动脚本。因为commands.txt文件中保存了密码。我需要在远程服务器上执行start之后删除它。但是del命令在执行所有操作之前执行,这会导致循环出现问题,并导致commands.txt文件丢失。不确定当它放在循环之后时,它是如何在循环之前执行的。我怎样才能解决这个问题 下面是我正在尝试的代码 @echo off Echo Please enter your password in the popup window and the

我正在尝试设置一个批处理脚本,它可以连接到一组服务器并执行启动脚本。因为commands.txt文件中保存了密码。我需要在远程服务器上执行start之后删除它。但是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}

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%"
另外,我改变了颜色,你选择了明亮的右边明亮的黄色是难以阅读的,我用了明亮的白色在明亮的红色。哦,我还在你的第二个脚本中添加了一个回音,因为在其中添加所有额外的内容同样没有帮助


我也看了这个,注意到你不会将PW保存在PW文件中,所以我通过使用%%修复了这个问题,以便第一个%将被剥离。

你似乎在其他地方运行这个,否则,为什么你会在最后有一个扭曲的支架,这是Powershell脚本块吗?>问题在于您如何不在双Quotes中包装临时Bat的路径我已经为您解决了这个问题,并将作为答案重新发布我必须在远程服务器上执行一些命令。这就是commands.txt中需要的内容。以及服务器列表中的服务器IP列表。我不这么看这个剧本。所以基本上需求是这样的。登录到serverlist文件中列出的每台服务器,执行commands.txt中提到的命令,然后删除此commands.txt文件。我想屏蔽密码,这就是为什么我保持颜色不可读的原因。@Rahull说实话,那么你应该打电话到Powershell来收集密码,或者我相信你可以使用Choice通过一些工作来无声地收集每个字符。我的问题仍然没有答案。为什么我不能在for循环执行后删除commands.txt。为什么它在“for循环”之前执行,即使它在脚本中保留在“for循环”之后。p、 It’很抱歉我的无知,我最近正在尝试将其自动化。所以我在这里使用shell脚本的逻辑。shell脚本逐行执行。我不知道为什么delete命令在for之前执行loop@RahulR它不会在其他行之前执行。您从未调用bat文件并收集数据,因为您没有将目录用双引号括起来,也没有扭曲设置,从而在没有运行任何代码的情况下产生问题。Bash-abd-CMD都是按顺序工作的,这个问题完全是由于代码的格式是错误的。此外,我运行了abice代码,irlt按预期工作,尽管我执行了测试命令,而不是实际连接到服务器。我意识到我没有删除那个wch,所以我现在就这样做。