Windows任务计划程序在尝试通过bsub设置时出错

tsm1rwdh  于 2023-10-22  发布在  Windows
关注(0)|答案(1)|浏览(153)

当我执行命令时:
SCHTASKS /create /tn "ADW_generic" /s noivw-pulsereg3 /tr "\"U:\adw_prerun_bat_file\filesToUseInAutomatedPvReg\ADWGeneric_cic.bat\" -var 23232 " /sc ONCE /sd 12/29/2014 /st 12:00 /f
那就不会有问题了
但是,当我在perl中通过bsub(使用system)运行相同的命令时,如下所示:

my $cmdTriggerServerSetup = "bsub -J ADWServer -m machine1 -e //noida02/psd/error_tette.log -q win_normal \'SCHTASKS /create  /tn \"ADW_generic\" /s noivw-pulsereg3 /tr \"\"U:\\adw_prerun_bat_file\\filesToUseInAutomatedPvReg\\ADWGeneric_cic.bat\" -var 23232 \"  /sc ONCE /sd 12/29/2014 /st 12:00  /f\'";

出现以下错误:

ERROR: Invalid argument/option - '-var'.
Type "SCHTASKS /CREATE /?" for usage.

我怎样才能摆脱这个错误?我知道这个错误是因为引号,因此希望帮助弄清楚如何将引号添加到命令中。
我希望所需的字符串是SCHTASKS /create /tn "ADW_generic" /s noivw-pulsereg3 /tr "\"U:\adw_prerun_bat_file\filesToUseInAutomatedPvReg\ADWGeneric_cic.bat\" -var 23232 " /sc ONCE /sd 12/29/2014 /st 12:00 /f
但是当我使用as时:

my $cmdTriggerServerSetup = "bsub -J ADWServer -m machine1 -e //noida02/psd/error_tette.log -q win_normal \'SCHTASKS /create  /tn \"ADW_generic\" /s noivw-pulsereg3 /tr \"\\"U:\\adw_prerun_bat_file\\filesToUseInAutomatedPvReg\\ADWGeneric_cic.bat\\" -var 23232 \"  /sc ONCE /sd 12/29/2014 /st 12:00  /f\'";

它给了我一个错误:

Bareword found where operator expected at test.pl line 24, near "U"
        (Missing operator before U?)
xpszyzbs

xpszyzbs1#

我们想建立一些命令。为了建造它们,我们需要这个:

use String::ShellQuote qw( );
use Win32::ShellQuote  qw( );  # Can be installed and used on any platform.

# Import with custom names.
BEGIN { *quote_for_sh    = \&String::ShellQuote::shell_quote; }
BEGIN { *quote_for_win32 = \&Win32::ShellQuote::quote_native; }

首先,我们需要创建一个Windows命令。

my $task = quote_for_win32(
   'U:\\adw_prerun_bat_file\\filesToUseInAutomatedPvReg\\ADWGeneric_cic.bat' => (
      -var => $var1,
   )
);

又一个。

my $remote_cmd = quote_for_win32(
   schtasks => (
      "/create",
      "/tn", "ADW_generic",
      "/s", "noivw-pulsereg3",
      "/tr", $tasks,
      "/sc", "ONCE",
      "/sd", "12/29/2014",
      "/st", "12:00",
      "/f",
   )
);

我们可以在这里构建一个sh命令传递给system

my $local_cmd = quote_for_sh(
   bsub => (
      -J => "ADWServer",
      -m => "machine1",
      -e => "//noida02/psd/error_tette.log",
      -q => "win_normal",
      $remote_cmd,
   )
);

但是我们可以直接启动bsub,而不是使用shell中介。

system(
   bsub => (
      -J => "ADWServer",
      -m => "machine1",
      -e => "//noida02/psd/error_tette.log",
      -q => "win_normal",
      $remote_cmd,
   )
);

如果需要捕获输出或其他内容,请使用IPC::Run的run而不是system

相关问题