我如何在perl中执行Windows批处理文件?
这是批处理文件
@echo off 2>nul (>>test.csv echo off) && ( set ret=0) || (set ret=1)
@echo.%ret%>test.txt
上面的代码检查名为test.csv的文件是否打开。如果打开,它将返回1,否则它将返回0.我已将此结果保存在test.txt文件中。
如果我在perl文件中使用任何html代码,我使用它来排除html代码。
print <<end_of_file;
<html>
html code inside this
</html>
end_of_file
有人可以建议我如何以类似的方式将批处理文件包含在perl代码中。
答案 0 :(得分:4)
与HTML一样,
<<'end_of_file'
@echo off 2>nul (>>test.csv echo off) && ( set ret=0) || (set ret=1)
@echo.%ret%>test.txt
end_of_file
我怀疑你的问题是如何让cmd
执行变量中的命令。
use IPC::Open3 qw( open3 );
my $shell_commands = <<'end_of_file';
@echo off 2>nul (>>test.csv echo off) && ( set ret=0) || (set ret=1)
@echo.%ret%>test.txt
end_of_file
{
pipe(local *R, local *W) or die($!);
my $pid = open3('<&R', '>&STDOUT', '>&STDERR', 'cmd');
print(W $shell_commands);
print(W "exit\n");
close(W);
waitpid($pid, 0);
}
为什么要使用cmd
检查是否可以打开文件?!请改用以下内容:
my $ret = open(my $fh, '>>', test.csv) ? 0 : 1;
open(my $result_fh, '>', 'test.txt') or die($!);
print($result_fh "$ret\n");
顺便说一下,在两个版本中,权限错误都会导致文件被报告为打开,并且如果打开共享文件,它会将打开的文件报告为已关闭。