Как использовать фигурные скобки в Windows? - PullRequest
0 голосов
/ 14 февраля 2019

Раньше я использовал такие пути ls {path1,path2}/* в Linux, но в Windows PowerShell я получил следующую ошибку

At line:1 char:10
+ ls {path1,path2}/*
+          ~
Missing argument in parameter list.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingArgument

Я пытался dir {path1,path2}/* вместо ls {path1,path2}/*, но выдает ту же ошибку!!

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы должны использовать соответствующий командлет / псевдоним для среды, в которой вы работаете (рассмотрим Linux linux PowerShell ls относится к системе ls, а не PoSh gci)

PowerShell позволяет подстановочные знаки *? (и диапазоны [0-2]) на нескольких уровнях, поэтому это должно сделать:

Get-ChildItem -Path some\verbose[12]\dir\* -Include *.ext1,*.ext2

В случае, если часть пути будет полностью отличаться, вам потребуется указать массив:

Get-ChildItem -Path some\this\dir\*,some\that\dir\* -Include *.ext1,*.ext2
0 голосов
/ 14 февраля 2019

Я думаю, что вы хотите, это:

ls path1,path2 -recurse

Path1 и Path2 либо должны быть переменными или в кавычках.

Вот пример

PS C:\> ls "c:\temp\test1","c:\temp\test2" -recurse


    Directory: C:\temp\test1


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        2/14/2019  10:29 AM                test1subdir


    Directory: C:\temp\test1\test1subdir


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2/14/2019  10:29 AM             13 test1file.txt


    Directory: C:\temp\test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2/14/2019  10:30 AM              6 test2file.log

Я знаю, что это может быть сумасшествием, но вы можете создать функцию, которая будет почти повторять то, что вы пытаетесь сделать:

function new-ls {

param([Parameter(Position=0)]
[string]$Path,
[Parameter(Position=1)]
[string[]]$Includes)


$StrMatch = ($Path | sls -pattern "^(.*?){(.*?),(.*?)}(.*?)$" -allmatches).matches.groups.value
$NewPaths = @(($StrMatch[1] + $StrMatch[2] + $StrMatch[4]), ($StrMatch[1] + $StrMatch[3] + $StrMatch[4]))
ls $NewPaths -include $Includes -recurse

}

# Running the code

PS C:\temp> new-ls "c:\temp\{test1,test2}\*"


    Directory: C:\temp\test1\test1subdir


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2/14/2019  10:29 AM             13 test1file.txt


    Directory: C:\temp\test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2/14/2019  10:30 AM              6 test2file.log


PS C:\temp> new-ls "c:\temp\{test1,test2}\*" "*.txt"


    Directory: C:\temp\test1\test1subdir


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2/14/2019  10:29 AM             13 test1file.txt

PS C:\temp> new-ls "c:\temp\{test1,test2}\*" "*.txt","*.log"


    Directory: C:\temp\test1\test1subdir


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2/14/2019  10:29 AM             13 test1file.txt


    Directory: C:\temp\test2


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2/14/2019  10:30 AM              6 test2file.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...