0

我正在尝试列出远程计算机 10.31.236.56 上的目录
我正在使用 staf 。 staf 文档将命令说为

LIST   DIRECTORY <Name> [RECURSE] [LONG [DETAILS] | SUMMARY] [TYPE <Types>]
   [NAME <Pattern>] [EXT <Pattern>] [CASESENSITIVE | CASEINSENSITIVE]
   [SORTBYNAME | SORTBYSIZE | SORTBYMODTIME]   

所以我用它作为

system("staf  10.31.236.56  FS LIST DIRECTORY  c:\\RMT\\Log ");

我得到了结果,但是当我尝试匹配特定文件时

 system("staf  10.31.236.56  FS LIST DIRECTORY  c:\\RMT\\Log  NAME  /latest*.*/");

我没有得到任何回应有人可以帮助我吗?

4

1 回答 1

1

shell 很可能在通配符传递给 STAF 之前对其进行解释。我建议将 STAF 的所有参数放在引号中,这样 shell 就不会干扰。

为了获得最佳结果,也许避免使用system(string)来启动命令,而是使用其中一个qx{}system(LIST)这样一个子shell 不被调用。

也许是这样的:

my $cmd = "staf  10.31.236.56  FS LIST DIRECTORY  c:\\RMT\\Log  NAME  /latest*.*/";
system(split ' ', $cmd);

当您向系统传递单个字符串时,它会启动一个 shell,并将该字符串作为要执行的命令传递。然后,shell 解析该字符串(包括任何通配符)并运行该命令。由于您不希望这种情况发生(因为您不希望 shell 解析“latest*.*”),您可以向系统传递一个列表,它会告诉它直接启动 staf。

于 2012-04-06T05:58:58.703 回答