如何在批处理脚本中将命令执行作为输出文件名附加

时间:2016-07-15 13:13:19

标签: batch-file

我有批处理脚本,它使用for循环读取并执行在server.txt文件中提到的所有服务器上的command.txt中定义的命令。

问题是,我试图将输出/结果文件作为" server_command.log"对于每个执行的命令。

我可以轻松获取服务器详细信息但是对于命令,我需要从command.txt文件中获取最后一个单词,因为每个命令都有特殊字符,即/

command.txt内容:

show /system1/firmware1
show /system1/fan1

server.txt将具有目标服务器的IP地址:

10.1.1.101
10.1.1.103
10.1.1.105
我试图得到的

输出文件应该是:

101.1.1.101_firmware1.log (file will contain fireware1 command output)
101.1.1.101_fan1.log (file will contain fan1 command output)
101.1.1.103_firmware1.log (file will contain fireware1 command output)
101.1.1.103_fan1.log (file will contain fan1 command output)
101.1.1.105_firmware1.log (file will contain fireware1 command output)
101.1.1.105_fan1.log (file will contain fan1 command output)

我的批处理文件:

for /f "tokens=1" %%a in (.\config\serverlist.txt) do (
  echo _
  echo -----  Opening connection to: %%a at %TIME% -----  >> %LOGFILE%
  for /f "tokens=*" %%c in (.\config\commands.txt) do (
    set MyCmd=%%c
    set Server=%%a
    echo --------- %%c and %%a ------------------
    set MyLog=.\Logs\!Server!_%MyDate%.!MyCmd!.log
       .\plink -ssh %username%@!Server! -pw %password% "!MyCmd!" >> !MyLog!
  )
  echo. >> %LOGFILE%
  echo -----  Closing connection to: %%a at !TIME! -----  >> %LOGFILE%
)

由于

1 个答案:

答案 0 :(得分:0)

用空格替换您的特殊符号(/)并使用简单的for来获取最后一个元素:

...
set MyCmd=%%c
for %%X in (!MyCmd:/^= !) do set MyCmd=%%X
echo !MyCmd!
...