如何在PowerShell中创建目录和文件数组?
我知道在PowerShell中可以按如下方式创建阵列如何在PowerShell中创建目录和文件数组?,powershell,Powershell,我知道在PowerShell中可以按如下方式创建阵列 $myArray = "item1", "item2", "item3" 或者使用另一种语法 $myfruits = @('Pineapple','Oranges','Bananas') 我需要创建一个数组,其中包含目录名和在脚本根目录中找到的文件 $myArray = folder1, folder2, folder3, myprogram.exe 数组中的项目是文件夹的实际名称,以及在当前目录(脚本根目录)中找到的不带引号的可执行文
$myArray = "item1", "item2", "item3"
或者使用另一种语法
$myfruits = @('Pineapple','Oranges','Bananas')
我需要创建一个数组,其中包含目录名和在脚本根目录中找到的文件
$myArray = folder1, folder2, folder3, myprogram.exe
数组中的项目是文件夹的实际名称,以及在当前目录(脚本根目录)中找到的不带引号的可执行文件。这不适用于PowerShell在参数列表中给出错误缺少参数的情况。
我做错了什么?我在使用PowerShell 7.0的Windows 10 x64上。tl;dr
要使用字符串定义数组文字,必须引用其元素:
$myArray = 'folder1', 'folder2', 'folder3', 'myprogram.exe'
$myArray = 'folder1', 'folder2', 'folder3', 'myprogram.exe'
应避免使用数组文字的语法@(…)
。这不仅是不必要的,@(…)
,而且在5.0之前的PowerShell版本中效率低下,更重要的是,它错误地建议它构造数组,从而导致概念上的混乱。有关详细信息,请参见的底部部分
PowerShell有两种基本解析模式:
- 参数模式,与传统shell类似
- 在参数模式下,第一个标记被解释为命令名(例如cmdlet名称、函数名或可执行文件名),后跟以空格分隔的参数列表,如果这些参数既不包含空格,也不包含shell元字符,则可以不加引号
- 表达式模式,与传统编程语言类似,其中必须引用字符串
它是决定应用哪种模式的第一个标记(不包括变量赋值的LHS和=
)-有关更多信息,请参阅
在以下声明中:
$myArray = folder1, folder2, folder3, myprogram.exe
folder1
,因为它是不带引号的,并且:
- 不以
$
或开头(
或@
- 不是一个数字文字
触发器参数模式;也就是说,folder1
被解释为一个命令的名称,这会导致您看到的错误消息(您也可以使用类似于Get Date,
的命令来触发它)
因此,要使用字符串定义数组文字,必须引用其元素:
$myArray = 'folder1', 'folder2', 'folder3', 'myprogram.exe'
$myArray = 'folder1', 'folder2', 'folder3', 'myprogram.exe'
请注意,一个方便但低效的参数模式替代方案可以让您省去引用的工作,它如下所示:
$myArray = Write-Output folder1, folder2, folder3, myprogram.exe