Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell-从数组中的每个字符串获取变量_Powershell - Fatal编程技术网

Powershell-从数组中的每个字符串获取变量

Powershell-从数组中的每个字符串获取变量,powershell,Powershell,基本上,我试图实现的是foreachcharacter in$IDNumber它将沿着$number9prt1的行吐出一个字符串,并将其放入数组,然后移动到$IDNumber中的下一个字符,依此类推 完成后,我希望数组中的foreachstring获取每个字符串的变量 第一个示例将查看变量$Number9Prt1然后$Number8Prt1然后$Number7Prt1 简单地说,我有一个数组,它的值如下Number9Prt1然后Number8Prt1然后Number7Prt1。是否有一种方法可以

基本上,我试图实现的是
foreach
character in
$IDNumber
它将沿着
$number9prt1
的行吐出一个字符串,并将其放入数组,然后移动到
$IDNumber
中的下一个字符,依此类推

完成后,我希望数组中的
foreach
string获取每个字符串的变量

第一个示例将查看变量
$Number9Prt1
然后
$Number8Prt1
然后
$Number7Prt1

简单地说,我有一个数组,它的值如下
Number9Prt1
然后
Number8Prt1
然后
Number7Prt1
。是否有一种方法可以从数组中获取值,将其转换为变量,从变量中获取字符串并将其放入数组中。

我已经试了好几天了,但是运气不好。。。任何帮助都将不胜感激

多谢各位

新手程序员,卢克


原因:我在我的工作场所使用控制台窗口作为一种“GUI”,拥有更大的文本会很有帮助。

我个人只会使用数组。数组的每个索引都可以表示数字:

$Number1Prt2 = "####   "
$Number1Prt3 = "  ##   "
$Number1Prt4 = "  ##   "
$Number1Prt5 = "  ##   "
$Number1Prt6 = "  ##   "
$Number1Prt7 = "###### " 

$Number2Prt1 = " #######  "
$Number2Prt2 = "##     ## "
$Number2Prt3 = "       ## "
$Number2Prt4 = " #######  "
$Number2Prt5 = "##        "
$Number2Prt6 = "##        "
$Number2Prt7 = "######### "

$Number3Prt1 = " #######  "
$Number3Prt2 = "##     ## "
$Number3Prt3 = "       ## "
$Number3Prt4 = " #######  "
$Number3Prt5 = "       ## "
$Number3Prt6 = "##     ## "
$Number3Prt7 = " #######  "

$Number4Prt1 = "##        "
$Number4Prt2 = "##    ##  "
$Number4Prt3 = "##    ##  "
$Number4Prt4 = "##    ##  "
$Number4Prt5 = "######### "
$Number4Prt6 = "      ##  "
$Number4Prt7 = "      ##  "

$Number5Prt1 = "######## "
$Number5Prt2 = "##       "
$Number5Prt3 = "##       "
$Number5Prt4 = "#######  "
$Number5Prt5 = "      ## "
$Number5Prt6 = "##    ## "
$Number5Prt7 = " ######  "

$Number6Prt1 = " #######  "
$Number6Prt2 = "##     ## "
$Number6Prt3 = "##        "
$Number6Prt4 = "########  "
$Number6Prt5 = "##     ## "
$Number6Prt6 = "##     ## "
$Number6Prt7 = " #######  "

$Number7Prt1 = "######## "
$Number7Prt2 = "##    ## "
$Number7Prt3 = "    ##   "
$Number7Prt4 = "   ##    "
$Number7Prt5 = "  ##     "
$Number7Prt6 = "  ##     "
$Number7Prt7 = "  ##     "

$Number8Prt1 = " #######  "
$Number8Prt2 = "##     ## "
$Number8Prt3 = "##     ## "
$Number8Prt4 = " #######  "
$Number8Prt5 = "##     ## "
$Number8Prt6 = "##     ## "
$Number8Prt7 = " #######  "

$Number9Prt1 = " #######  "
$Number9Prt2 = "##     ## "
$Number9Prt3 = "##     ## "
$Number9Prt4 = " ######## "
$Number9Prt5 = "       ## "
$Number9Prt6 = "##     ## "
$Number9Prt7 = " #######  "

$Number0Prt1 = "  #####   "
$Number0Prt2 = " ##   ##  "
$Number0Prt3 = "##     ## "
$Number0Prt4 = "##     ## "
$Number0Prt5 = "##     ## "
$Number0Prt6 = " ##   ##  "
$Number0Prt7 = "  #####   "

$IDNumber = "9873453"
$CharArray =$IDNumber.ToCharArray()

#Creating variables
foreach ($CharArray in [char[]]$CharArray) { $NumberArray += ("$"+"Number"+$CharArray+"Prt"+"1")}
说明:

$Numbers
是一个数组,其中每个索引都包含一个表示数字图形的数组。因此,
$Numbers['0']
包含组成
0
图形的数组元素,
$Numbers['1']
包含组成
1
图形的数组元素,等等。现在您只需要检索包含目标图形的
$Numbers
索引

如果shell中的视觉表示对您很重要,您仍然可以保持:

# For simplicity, I only created 0,1,2,3 indices.
# Each index number matches the graphical number it stores.
$Numbers = @("  #####   "," ##   ##  ","##     ## ","##     ## ","##     ## "," ##   ##  ","  #####   "),
           @("####   ","  ##   ","  ##   ","  ##   ","  ##   ","  ##   ","###### "),
           @(" #######  ","##     ## ","       ## "," #######  ","##        ","##        ","######### "),
           @(" #######  ","##     ## ","       ## "," #######  ","       ## ","##     ## "," #######  ")

$IDNumbers = '20012'
$IDNumbers.ToCharArray() | Foreach-Object { $Numbers["$_"] }

# Output
 #######
##     ##
       ##
 #######
##
##
#########
  #####
 ##   ##
##     ##
##     ##
##     ##
 ##   ##
  #####
  #####
 ##   ##
##     ##
##     ##
##     ##
 ##   ##
  #####
####
  ##
  ##
  ##
  ##
  ##
######
 #######
##     ##
       ##
 #######
##
##
#########

您可以基于此方法进行水平显示:

$Numbers = @(
"  #####   ",
" ##   ##  ",
"##     ## ",
"##     ## ",
"##     ## ",
" ##   ##  ",
"  #####   "
),
@(
"####   ",
"  ##   ",
"  ##   ",
"  ##   ",
"  ##   ",
"  ##   ",
"###### "
),
@(
" #######  ",
"##     ## ",
"       ## ",
" #######  ",
"##        ",
"##        ",
"######### "
),
@(
" #######  ",
"##     ## ",
"       ## ",
" #######  ",
"       ## ",
"##     ## ",
" #######  "
)
您只需将连接字符(此处的选项卡)更改为任意一个或一组字符即可。因为每个图形有7个部分,所以可以循环遍历每个部分(索引0-6)。由于我们将每个部分创建为数组的一个元素,因此您拥有一个嵌套数组数组。因此,图形
0
第1部分将是
$Numbers['0'][0]
,图形
3
第4部分将是
$Numbers['3'][3]


编辑:使用字母和数字

您可以使用哈希表而不是数组来保存图形。然后可以通过哈希表键访问每个图形数组

$Numbers = @("  #####   "," ##   ##  ","##     ## ","##     ## ","##     ## "," ##   ##  ","  #####   "),
           @("####   ","  ##   ","  ##   ","  ##   ","  ##   ","  ##   ","###### "),
           @(" #######  ","##     ## ","       ## "," #######  ","##        ","##        ","######### "),
           @(" #######  ","##     ## ","       ## "," #######  ","       ## ","##     ## "," #######  ")

$IDNumbers = '20012'
for ($i = 0; $i -lt 7; $i++) {
    ($IDNumbers.ToCharArray() | Foreach-Object { $Numbers["$_"][$i] }) -join "`t"
}

这太棒了,别误会我的意思,我这么做是为了让变量排成一行,然后水平显示。但我非常感谢您的回答。我添加了如何在创建变量时使其显示在shell中。在shell中,它们如何显示并不真正困扰我,但在控制台窗口中,我试图使它们水平显示。在代码中,我抓取值的顶行,添加一个
'n
,然后创建一个循环,移动到第二行,然后是第三行。。。。。然后水平显示人物。我添加了一种水平显示的方式。这就是巫术。完美的非常感谢您首先,您使用chararray变量作为迭代变量,而它应该只是char数组。将其更改为foreach($chararray中的char){…使用$char做点什么…}第二,您可以简单地增加控制台的字体大小,为什么要这样做呢?第三,您不希望将$作为变量名的一部分。我将尝试第一个变量,我不是管理员,因此无法保存任何系统更改,但由于某些原因,当计算机重新启动时,所有值都会返回默认值。只是好奇而已。[原因:我在我的工作场所使用控制台窗口作为一种“GUI”,拥有更大的文本会很有帮助。]为什么?仅使用内置GUI功能的Verses Powershell就可以通过say和消息框为您提供帮助?从GUI,特别是人类可访问性(屏幕阅读器、屏幕分辨率等)用例。你的方法将是一个真正的问题。
$hash = [ordered]@{}
$hash['A'] = @('      ####      ','     ##  ##     ','    ##    ##    ','   ##########   ','  ##        ##  ',' ##          ## ','##            ##')
$hash['0'] = @("  #####   "," ##   ##  ","##     ## ","##     ## ","##     ## "," ##   ##  ","  #####   ")
$hash['1'] = @("####   ","  ##   ","  ##   ","  ##   ","  ##   ","  ##   ","###### ")
$hash['2'] = @(" #######  ","##     ## ","       ## "," #######  ","##        ","##        ","######### ")
$hash['3'] = @(" #######  ","##     ## ","       ## "," #######  ","       ## ","##     ## "," #######  ")

$IDNumbers = 'A23012'
for ($i = 0; $i -lt 7; $i++) {
    ($IDNumbers.ToCharArray() | Foreach-Object { $hash["$_"][$i] }) -join "`t"
}