Powershell脚本,用于根据文件名

时间:2018-06-12 20:16:12

标签: powershell

我有一个包含数千个文件的文件夹。我想编写一个Powershell脚本,循环遍历文件并复制其文件名包含特定关键字的每个文件。在伪代码中:

For each file in C:\[Directory]
    If filename contains "Presentation" Then
        copy file in C:\[Directory 2]

谢谢!

4 个答案:

答案 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" }

...但是,当然,您需要填写伪代码示例中剩下的一些空白。

此外,这是一个单行,但我插入了一个返回托架,以便于阅读。