编辑:我将此作为一个bug报告给了Raku:qqx,shell不能正确操作报价https://github.com/rakudo/rakudo/issues/3518
其中一个管理员向我推荐了How should Proc::Async.new,run and shell call cmd.exe?https://github.com/Raku/problem-solving/issues/20
这听起来确实像是正在发生的事情,特别是“不可能使用^.来转义空格”这部分。
如果有人想出一个变通办法,我会很感激的。
Windows 7和Windows 10-1909
Rakudo星星版本2019.03.1
如何在Raku中编写此命令?
fsutil usn readdata "C:/NtUtil/test 1"
最大的问题是文件名中有一个空格,Windows要求在它周围加上双引号。单引号崩溃。
我不能让这两个工作与一个文件名与一个空格在它。fsutil要么看到两个参数,要么看到一个参数,其中名称实际上包含双引号:
my @Result = qqx { C:/Windows/System32/fsutil.exe usn readdata "$FileName" }.lines;
for @Result -> $Line { say $Line; };
my $proc=run( "dir", "$FileName", :out );
my @RtnStr = $proc.out.slurp-rest.lines;
for @RtnStr -> $Line { say $Line; }
非常感谢,T
编辑:将Windows 10-1909添加到战斗中
编辑:使用“shell”命令时症状无变化:
@Result = shell( "C:/Windows/System32/fsutil.exe usn readdata \"$FileName\"" ).lines;
for @Result -> $Line { say $Line; };
Usage : fsutil usn readData <filename>
Eg : fsutil usn readData C:\Temp\sample.txt
@Result = shell( "C:/Windows/System32/fsutil.exe usn readdata \"$FileName\"" );
for @Result -> $Line { say $Line; };
退出:
Proc.new(in => IO::Pipe, out => IO::Pipe, err => IO::Pipe, exitcode => 1, signal => 0, pid => 1728, command => ("C:/Windows/System32/fsutil.exe usn readdata \"C:/NtUtil/test 1\"",))
注意“exitcode => 1”和最后一个带有反斜杠的参数
编辑:使用单引号方法:
@Result = shell( 'C:/Windows/System32/fsutil.exe usn readdata "$FileName"' );
导致相同的错误:
Usage : fsutil usn readData <filename>
Eg : fsutil usn readData C:\Temp\sample.txt
Error: The filename, directory name, or volume label syntax is incorrect.
Proc.new(in => IO::Pipe, out => IO::Pipe, err => IO::Pipe, exitcode => 1, signal => 0, pid => 1192, command => ("C:/Windows/System32/fsutil.exe usn readdata \"\$FileName\"",))
5条答案
按热度按时间kr98yfug1#
有
shell
:这里和那里都是一样的。它还将使用任何操作系统的现有通用shell。你也可以使用变量,前提是你要给shell加转义引号:
或
qlckcl4x2#
你好,我一直在测试Perl 6现在Raku从Windows 7到Windows 10。我不知道这是否解决了问题,但对我来说,这是有效的:在文件.rk或file.pl中写入:
shell“fsutil fsinfo drives & pause”;
fsutil和pause都可以工作。
siotufzp3#
也许这会有帮助:
您可以尝试使用
^
转义文件路径中的空格范例:
kcugc4gi4#
我有一个解决方案,任何人停止,因为这个错误:我正在利用批处理编程语言中的Windows构建:
测试结果:
sdnqo3pr5#
我搞砸了很长时间;我差点就跟拉库分手了最后用powershell写了这个:希望这对某人有帮助。
编辑:回答原始问题