6

質問の現在のバージョン:

配列$tbd_listを次のように初期化します。

$tbd_list = @()
foreach($i in $tbd) {
    # -- If statement prevents duplicate id's
    if(!($tbd_list -match $i.id)){
        $tbd_list += $i.id
    }
}

この時点で、$ tbd_listを出力すると、次のようになります。

"dce50fdd-2298-45db-8aac-fb13a176fe1a*.*"
"79c1538f-09b1-4ed7-b84c-ff1a7934596a*.*"
"60511686-7a87-4352-a781-62e7c04913e5*.*"
"0821f8ee-c1ca-4568-ab68-bb5e30d07268*.*"
"3b9f5da0-fc2d-49e3-a11d-943f5ac2296a*.*"
"ff7720fd-2c0f-43c8-871a-e283f231c823*.*"

($ tbd_list.GetType()。FullNameはSystem.Objectを返します)

次に、次のコードを実行しようとします。

Get-ChildItem F:\store_test\ -Recurse -Include $tbd_list

しかし、私は見返りに何も得られません。

ただし、これを手動で入力すると、次のようになります。

$tbd_list = "dce50fdd-2298-45db-8aac-fb13a176fe1a*.*", "79c1538f-09b1-4ed7-b84c-ff1a7934596a*.*", "60511686-7a87-4352-a781-62e7c04913e5*.*", "0821f8ee-c1ca-4568-ab68-bb5e30d07268*.*", "3b9f5da0-fc2d-49e3-a11d-943f5ac2296a*.*", "ff7720fd-2c0f-43c8-871a-e283f231c823*.*"

この時点で、$ tbd_listを出力すると、次のようになります。

"dce50fdd-2298-45db-8aac-fb13a176fe1a*.*"
"79c1538f-09b1-4ed7-b84c-ff1a7934596a*.*"
"60511686-7a87-4352-a781-62e7c04913e5*.*"
"0821f8ee-c1ca-4568-ab68-bb5e30d07268*.*"
"3b9f5da0-fc2d-49e3-a11d-943f5ac2296a*.*"
"ff7720fd-2c0f-43c8-871a-e283f231c823*.*"

同じ行を実行します($ tbd_list.GetType()。FullNameは引き続きSystem.Objectを返します):

Get-ChildItem F:\store_test\ -Recurse -Include $tbd_list

それは完璧に動作します。助言がありますか?

解決

以下の両方の答えは正しいですが、私は1つしか選択できません。

変数が配列であることを確認した後、先頭と末尾の引用符を削除する必要があり、スクリプトが機能します。ありがとう!

4

3 に答える 3

5

$ tbd_list.GetType()。FullNameはSystem.Stringを提供します

$ tbd_listをどのように定義したかは質問からはわかりませんが、配列である必要があり、配列である場合にのみ、Get-ChildItemIncludeオプションで機能します。文字列の場合、期待どおりに機能しません。適切に定義します。

$tbd_list = "dce50fdd-2298-45db-8aac-fb13a176fe1a*.", "79c1538f-09b1-4ed7-b84c-ff1a7934596a.*", "dce50fdd-2298-45db-8aac-fb13a176fe1a*.", "79c1538f-09b1-4ed7-b84c-ff1a7934596a.*", "dce50fdd-2298-45db-8aac-fb13a176fe1a*.", "60511686-7a87-4352-a781-62e7c04913e5.*", "0821f8ee-c1ca-4568-ab68-bb5e30d07268*.", "3b9f5da0-fc2d-49e3-a11d-943f5ac2296a.*", "ff7720fd-2c0f-43c8-871a-e283f231c823*.*"

上記の行を使用すると、Get-ChildItem

アップデート:

これはあなたがそれを間違っているところです:

$tbd_list = "$tbd_list, " + $i.id

文字列を作成します。

$tbd_list配列として初期化する必要があります。

$tbd_list = @()

必要なアイテムを追加します。

$tbd_list += $i.id
于 2012-04-09T15:08:26.770 に答える
1

$i.id引用文字を含めないでください。コマンドラインでは、文字列を指定しますが、これらの文字が文字列変数に格納されている文字列の一部である場合、次のように機能しません。

9 >  gci t*.txt


    Directory: Microsoft.PowerShell.Core\FileSystem::C:\Users\Keith


Mode           LastWriteTime       Length Name
----           -------------       ------ ----
-a---      4/3/2012  8:54 PM           13 test.txt
-a---    10/20/2011  9:13 AM         2872 trace.txt


10 >  $a = "`"t*.txt`""
11 >  $a
"t*.txt"
12 >  gci * -Include $a

次のように、先頭と末尾の引用符を削除します。

$tbd_list += $i.id.Trim('"')
于 2012-04-09T16:12:53.573 に答える
0
$pattern="packages","obj","bin" # needs to be string[]

また

[string[]] $pattern="packages","obj","bin"

Get-ChildItem -Recurse -Name -Attributes H,!H -Directory -Include $pattern
于 2018-07-19T06:15:33.833 に答える