我有一个包含数千个文件的文件夹。我想编写一个Powershell脚本,循环遍历文件并复制其文件名包含特定关键字的每个文件。在伪代码中:
For each file in C:\[Directory]
If filename contains "Presentation" Then
copy file in C:\[Directory 2]
谢谢!
答案 0 :(得分:2)
只是喜欢这个?
copy-item "C:\SourceDir\*Presentation*" "C:\DestinationDir"
或者像这样:
copy-item "C:\SourceDir\*" "C:\DestinationDir" -Filter "*rrrr*"
但是,如果您的名称中有一个名为“presentation”的目录,则存在风险。然后采用此处提出的所有方法并在get-childitem命令中添加-file。 就像在这个简短版本的Robdy代码中一样:
gci "C:\SourceDir" -file | ? Name -like "*Presentation*" | cpi -d "C:\DestinationDir"
答案 1 :(得分:1)
该代码应该可以解决问题:
$files = Get-ChildItem -Path "C:\path\to\source\folder"
$files | Where-Object Name -Like "*Presentation*" | Copy-Item -Destination "C:\path\to\destination\folder"
当然可以写成一行,但为了提高知名度,我把它放在了两行。
编辑:正如Esperento57指出的那样,您可能希望将-ItemType File
添加到Get-ChildItem
cmdlet,以便不包含带有'演示文稿'以他们的名义。此外,根据您的需要,您可能还希望使用-Recurse
param将文件包含在子文件夹中。
如果您在子文件夹中有文件并且想要将路径保留在目标文件夹中,则必须将脚本稍微更改为:
Copy-Item -Destination $_.FullName.Replace('C:\path\to\source\folder','C:\path\to\destination\folder')
对于上述情况,您必须确保实际创建了文件夹(例如,-Force
使用Copy-Item
。
答案 2 :(得分:0)
这似乎有效:
$src = "Dir1"
$dst = "Dir2"
Get-ChildItem $src -Filter "*Presentation*" -Recurse | % {
New-Item -Path $_.FullName.Replace($src,$dst) -ItemType File -Force
Copy-Item -Path $_.FullName -Destination $_.FullName.Replace($src,$dst) -Force
}
答案 3 :(得分:0)
尝试这样的事情:
Get-ChildItem "C:\Your\Directory" -File -Filter *YourKeyWordToIsolate* |
Foreach-Object { Copy-Item $_.FullName -Destination "C:\Your\New\Directory" }
...但是,当然,您需要填写伪代码示例中剩下的一些空白。
此外,这是一个单行,但我插入了一个返回托架,以便于阅读。