Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理脚本,通过SSH连接,执行命令并将结果传递到输出文件_Batch File_Output - Fatal编程技术网

Batch file 批处理脚本,通过SSH连接,执行命令并将结果传递到输出文件

Batch file 批处理脚本,通过SSH连接,执行命令并将结果传递到输出文件,batch-file,output,Batch File,Output,我意识到这个查询很简单,互联网上有很多类似的主题,但由于某种原因,我无法做到这一点,我已经走到了尽头 情况就是这样。批处理脚本将连接(使用putty链接)到主机。它将执行一个命令(如检查主机版本)。脚本将把输出带到一个文件中 到目前为止,我已经能够配置它的大部分——我的脚本使用一个池源文件来保存IP,以读取它需要连接的主机;它连接到主机;执行“检查版本”命令,并将结果保存到文件中。 但是,结果的格式不好,我无法在输出文件中显示希望看到的格式 这是我的代码: :Var set out=E:\out

我意识到这个查询很简单,互联网上有很多类似的主题,但由于某种原因,我无法做到这一点,我已经走到了尽头

情况就是这样。批处理脚本将连接(使用putty链接)到主机。它将执行一个命令(如检查主机版本)。脚本将把输出带到一个文件中

到目前为止,我已经能够配置它的大部分——我的脚本使用一个池源文件来保存IP,以读取它需要连接的主机;它连接到主机;执行“检查版本”命令,并将结果保存到文件中。 但是,结果的格式不好,我无法在输出文件中显示希望看到的格式

这是我的代码:

:Var
set out=E:\output.txt
set src=E:\servers.txt
set ver=cat /etc/*-release
set creds=-l root -pw root
set host=hostname
:Cond
for /f %%i in (%src%) do call :Cmd %%i
:Cmd
plink -ssh %1 %creds% %host%
plink -ssh %1 %creds% %ver%
echo %1 is %ver% >> %out%
结果是这样的:

server01Red Hat Enterprise Linux Server release 5.7 Beta (Tikanga)
server02Red Hat Enterprise Linux Server release 5.7 Beta (Tikanga)
plink -ssh %1 %creds% ^(hostname;echo -e "\tOS:";cat /etc/issue^)^|sed '{:q;N;s/\n//g;t q}'
因此,我希望将其正确格式化,例如:

server01 OS:Red Hat Enterprise Linux Server release 5.7 Beta (Tikanga)
server02 OS:Red Hat Enterprise Linux Server release 5.7 Beta (Tikanga)
甚至可以截断在主机上运行的命令的输出,并仅显示其中的一部分,例如“Red Hat”


谢谢大家!

您正在调用:Cmd一次,但没有返回。 如果你真的从:Cmd返回,你会马上陷入其中。 您需要使用以下命令结束:Cmd 后藤:eof

然后你需要再放一个 转到:eof(或某些转到) before:Cmd,这样您就不会陷入其中


您希望输出的外观如何?如果您总是希望前2个令牌使用FOR语句。

在linux端解决问题更容易,即更改脚本,使其准确显示您想要的内容。例如,您可以执行以下命令:

(hostname;echo -e "\tOS:";cat /etc/issue)|sed '{:q;N;s/\n//g;t q}'
这将执行主机名,回显制表符和“OS:”,并显示/etc/issue(您也可以使用/etc/*-release)。最后,使用sed从结果中删除所有换行符。(您也可以使用
tr“\n”“”

如果要使用plink执行此操作,则需要确保在批处理文件中正确转义字符,如
。我没有关闭windows计算机,但它可能看起来像这样:

server01Red Hat Enterprise Linux Server release 5.7 Beta (Tikanga)
server02Red Hat Enterprise Linux Server release 5.7 Beta (Tikanga)
plink -ssh %1 %creds% ^(hostname;echo -e "\tOS:";cat /etc/issue^)^|sed '{:q;N;s/\n//g;t q}'

我不确定我是否逃脱了。将命令存储在文件中,然后执行它会更容易。您甚至可以使用scp上传脚本,执行并删除它。

Hi RGuggisberg感谢您的提示。我会改变的。至于结果,我想实现以下输出:server01 Red Hat Enterprise Linux Server release 5.7 Beta server02 Ubuntu server03 Red Hat Enterprise Linux Server release 6,也就是说。我还发现自己在尝试嵌入脚本时遇到了一个相当大的问题,所以如果这不可能,我至少希望确保和之间有空格。干杯