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
}

就目前而言,我有两个问题。我只知道如何浏览一个目录,我不知道如何指定脚本来复制我刚刚找到的特定文件。

4

3 回答 3

3

Path 参数接受一组路径,因此您可以指定多个路径。您可以使用 Filter 参数来获取您要查找的文件名,并将结果通过管道传送到Copy-Itemcmdlet:

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

把它包装成一个函数怎么样?

使用谢伊的方法:

function copyfile($path,$fileName,$Destination) {
Get-ChildItem -Path  $path -Recurse -Filter $fileName | 
Copy-Item -Destination $Destination
}

$path1=C:\Users\Public\Documents
$path2=C:\Users\Public\Music
$path3=C:\Users\Public\Pictures

copyfile $path1 corporate_policy.docx \\workstation\c$\users\Public\Documents
copyfile $path2 intro_from_ceo.mp3 \\workstation\c$\users\Public\Music
copyfile $path3 corporate_logo.jpg \\workstation\c$\users\Public\Pictures
于 2013-09-08T15:00:36.160 回答
0

您可以在一个管道中完成所有这些操作:

$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有一个尾随反斜杠,否则 cmdlet 将尝试将文件夹替换C:\test为文件C:\test,这将导致错误。

于 2013-09-07T12:06:08.943 回答