Тео и Маклайтон предоставили критический указатель в комментариях к вопросу:
$incFiles = """*.txt""`, ""*.docx"""
создает одиночная строка , чье дословное содержимое заканчивается как "*.txt", "*.docx"
.
В качестве отступа: обратный тик (`
), escape-символ PowerShell , не обязательно, учитывая, что ,
не имеет особого значения внутри "..."
( расширяемая строка ).
В то время как выглядит как литерал массива , как если бы вы передавали его напрямую параметру, который принимает массив строковых значений (например, -Include
в данном случае), то, что вы передаете, является одиночная строка , которая интерпретируется как одиночный шаблон подстановки, и поэтому не будет работать.
То, что вы пытаетесь сделать, потребует PowerShell для анализа содержимое строки , передаваемое как Исходный код PowerShell - т. е. потребуется дополнительный раунд оценки - чего он (к счастью) не делает. [1]
PowerShell, в отличие от других оболочек, способен передавать значения любого типа в качестве прямых аргументов командам либо с помощью переменной ($incFiles
, в вашем случае), либо с помощью выражения / вложенной команды, используя (...)
; Например, Write-Host -Foreground Yellow ('-' * 10)
)
Следовательно, создает переменную $incFiles
в виде массива из строк , а передает этот массив как это для параметра -Include
:
# Create a string array of wildcard expressions.
# (an [object[]] instance whose elements are of type [string]).
# Note the use of '...' rather than "...", which clearly signals that
# the enclosed text should be taken *verbatim* (rather than being subject to
# *expansion* (string interpolation).
$incFiles = '*.txt', '*.docx'
# Pass the array as-is to -Include
Get-ChildItem -path "C:\users\paul\Downloads" -Recurse -Include $incFiles
Для полного обзора того, как PowerShell анализирует аргументы, не заключенные в кавычки, переданные командам, см. этот ответ .
[1] Напротив, POSIX-подобные оболочки, такие как bash
, применяют дополнительную оценку к ссылкам на переменные без кавычек в ограниченной степени посредством так называемых расширений оболочки - см. этот ответ .