Редактировать: Я сообщил об этом как об ошибке в Raku: qqx, оболочка не работает с кавычками https://github.com/rakudo/rakudo/issues/3518
и один из администраторов направил меня в раздел Как следует Pro c :: Asyn c .new, запустить и вызвать оболочку cmd.exe? https://github.com/Raku/problem-solving/issues/20
, который звучит точно так же, как то, что происходит, особенно «Нельзя покинуть пробел, используя ^». часть.
Если кто-нибудь найдет обходной путь, я был бы признателен.
Windows 7 и Windows 10-1909
Rakudo Star версия 2019.03. 1
Как мне написать эту команду в Raku?
fsutil usn readdata "C:/NtUtil/test 1"
Большая ошибка в том, что в имени файла есть пробел и Windows требуется двойные кавычки Это. Одиночные кавычки cra sh.
Я не могу заставить ни один из этих двух работать с именем файла с пробелом в нем. 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\"",))
Обратите внимание на «код выхода => 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\"",))