【发布时间】:2016-08-17 17:51:12
【问题描述】:
我正在尝试使用通过 Plink 建立的 SSH 会话将命令输出发送到远程主机。我当前的命令如下所示(无限循环是故意的:
(for /l in %n (1,0,2) do ping 1.1.1.1 -n -w 1000 >nul & echo %RANDOM%) | plink.exe sessionName -l %user "cat > outputfile.txt"
我希望 outputfile.txt 包含一个随机生成的数字,但它包含以下内容:
C:\(PATH)> ping 1.1.1.1 -n 1 -w 1000 1>nul & echo 9001
为什么要发送整个命令,而不仅仅是随机数?
顺便说一句,它还附加到远程文件而不是重写。远程主机是基于 Linux 的,所以我希望它会重写文件,因为我使用的是 > 而不是 >>。
【问题讨论】:
-
1.管道为任一侧创建
cmd.exe实例,其中for回显其主体代码;为避免这种情况,请在每个命令前加上@,或将整个正文括在()中,并在左括号前加上@。 2、for /l命令行中缺少in关键字。 3.for /l循环定义了一个无限循环,除非你把step值改为1,比如in (1,1,2)。 4、plink部分有不平衡的引号。 5.我猜每次迭代返回的随机数都是一样的,除非你强制delayed expansion。 -
括号前的 @ 没有帮助,但是在 ping 和 echo 前面放一个可以解决问题。谢谢!这里的缺失是一个错字,但它包含在我的实际代码中。感谢您指出了这一点。循环应该是无限的,我接下来应该说一下。我一定会编辑帖子。 Plink 引号是这里的另一个错字,但不是代码。关于延迟扩展的良好链接。我以前没见过。再次感谢。这完美地回答了我的问题。
标签: windows batch-file for-loop pipe