1

現在、ファイル名をコンソールに出力するプログラムがあります。

そのファイル名を見つけるために(順番に)検索する一連のディレクトリを指定し、見つかった場合は別のディレクトリにコピーしたいと考えています。

私はこれまでのところ持っています:

[string]$fileName = "document12**2013" #** for wildcard chars
[bool]$found = false
Get-ChildItem -Path "C:\Users\Public\Documents" -Recurse | Where-Object { !$PsIsContainer -and GetFileNameWithoutExtension($_.Name) -eq "filename" -and $found = true }

if($found = true){
Copy-Item C:\Users\Public\Documents\ c:\test
}

現状では、2 つの問題があります。1 つのディレクトリを調べる方法しか知らないし、見つけたばかりの特定のファイルをコピーするスクリプトを指定する方法もわかりません。

4

3 に答える 3

3

Path パラメーターはパスの配列を受け入れるため、複数のパスを指定できます。Filter パラメーターを使用して目的のファイル名を取得し、結果をCopy-Itemコマンドレットにパイプします。

Get-ChildItem -Path C:\Users\Public\Documents,$path2,$path3 -Recurse -Filter $fileName | 
Copy-Item -Destination $Destination
于 2013-09-07T12:02:00.750 に答える
0

これらすべてを 1 つのパイプラインで実行できます。

$folders = 'C:\path\to\folder_A', 'C:\path\to\folder_B', ...

$folders | Get-ChildItem -Recurse -Filter filename.* |
    ? { -not $_.PSIsContainer } | Copy-Item -Destination 'C:\test\'

の宛先としてフォルダーを使用している場合は、末尾にバックスラッシュが必要であることに注意してください。そうしないと、コマンドレットはフォルダーをファイルCopy-Itemに置き換えようとするため、エラーが発生します。C:\testC:\test

于 2013-09-07T12:06:08.943 に答える