在powershell

时间:2019-07-02 08:59:16

标签: powershell

我有两个数组,每个数组包含三个元素(文件名部分)。我需要将第一个数组的第一个元素和第二个数组的第一个元素连接起来,并测试是否不为null以及是否存在combination(file name),同样,我需要以相同的方式对其他两个元素执行此操作。

$file_nameone_array = ( table, chair, comp)
$file_nametwo_array = ( top, leg , cpu)
foreach ($input_file in $file_nameone_array) {
foreach ($input_rev in $file_nametwo_array) {
$path = "D:\$input_file-$input_rev.txt"
    If (test-path $path -pathtype leaf) {
        write-host "$path exists and not null"}
    else{ 
        write-host "$path doesnot exist"
        exit 1}

我希望测试“ table-top.txt”,“ chair-leg.txt”,“ comp-cpu.txt” 而我的代码检查“ table-leg.txt”并退出并说table-leg.txt不存在。

3 个答案:

答案 0 :(得分:0)

您可以尝试这种方式:

$file_nameone_array = ( "table","chair", "comp") # INITILIZING ARRAY
$file_nametwo_array = ( "top", "leg", "cpu") # INITILIZING ARRAY

if ($file_nameone_array.Count -ne $file_nametwo_array.Count )  # CPMPARING BOTH ARRAY'S SIZE
{
    Write-Error "Both array must have same size..." # THROW ERROR
    exit # EXIT
}

for($ind = 0 ; $ind -lt $file_nameone_array.Count ; $ind++) # FOR LOOP 0 TO ARRAY'S LENGTH - 1
{
    $path = "D:\\" + $file_nameone_array[$ind] + "-" + $file_nametwo_array[$ind] + ".txt" # COMBINING BOTH ELEMENTS
    If (test-path $path -pathtype leaf) # CHECKING PATH EXIST OR NOT
    {
        write-host "$path exists and not null" # PRINT PATH EXIST
    } # END OF IF
    else # ELSE 
    {
        Write-Error "$path doesnot exist" # THROW ERROR : FILE NOT EXIST
        exit 1 # EXIT SCRIPT
    } # END OF ELSE

} # END OF FOR LOOP

答案 1 :(得分:0)

这听起来像是作业的编码问题(即您应该弄清楚的事情),所以我只给您提示而不是答案。

  • 您的数组元素需要用引号引起来。
  • 使用Write-Output $path来查看您实际要检查的内容。
  • 使用常规的for循环
  • 这是写数组第一个元素的输出的语法:Write-Output "$($file_nameone_array[0])"

希望您能从中得到这个答案。

答案 2 :(得分:0)

如果您稍微更改示例以仅显示$ path变量,例如:

$file_nameone_array = @( "table", "chair", "comp" )
$file_nametwo_array = @( "top", "leg" , "cpu" )
foreach ($input_file in $file_nameone_array) {
    foreach ($input_rev in $file_nametwo_array) {
        $path = "D:\$input_file-$input_rev.txt"
        write-host $path
    }
}

您将获得此输出

D:\table-top.txt
D:\table-leg.txt
D:\table-cpu.txt
D:\chair-top.txt
D:\chair-leg.txt
D:\chair-cpu.txt
D:\comp-top.txt
D:\comp-leg.txt
D:\comp-cpu.txt

因此您可以看到为什么它将“ D:\ table-top.txt”作为第一个文件。

相反,您可以做的是:

$file_nameone_array = @( "table", "chair", "comp" )
$file_nametwo_array = @( "top", "leg" , "cpu" )
for( $index = 0; $index -lt $file_nameone_array.Length; $index++ ) {
    $input_file = $file_nameone_array[$index];
    $input_rev  = $file_nametwo_array[$index];
    $path       = "D:\$input_file-$input_rev.txt"
    write-host $path
}

现在您将获得此输出

D:\table-top.txt
D:\chair-leg.txt
D:\comp-cpu.txt

您可以使用原始文件检查逻辑替换写主机,并且应该获得原来的行为。

注意-这要求您的数组长度完全相同,因此您可能需要在脚本中的这段代码之前进行一些错误处理。