使用robocopy排除没有扩展名的文件?

时间:2014-03-11 18:20:36

标签: powershell robocopy

我是Powershell的新手(截至今天上午)。我把这个脚本放在一起(目录反映了本地测试):

$Destinations = Get-Content "C:\PowerShellConfigFiles\destinationPaths.txt"
$Source = [IO.File]::ReadAllText("C:\PowerShellConfigFiles\sourcePath.txt")
$ExcludeFiles = [IO.File]::ReadAllText("C:\PowerShellConfigFiles\xf.txt")
$ExcludeDirectories = [IO.File]::ReadAllText("C:\PowerShellConfigFiles\xd.txt")

foreach($Destination in $Destinations)
{
    robocopy $Source $Destination /E /xf $ExcludeFiles /xd $ExcludeDirectories
}

在我的ExcludeFiles我有几个扩展程序,例如.xlsx。我还想要排除根本没有任何扩展名的文件。我无法使用/xf选项找到解决方法。可以这样做,还是我需要探索另一种方法来处理没有扩展名的文件?

1 个答案:

答案 0 :(得分:2)

使用正则表达式过滤 $ Source 中的文件列表,以获取没有扩展名的文件列表,并将该列表添加到 $ ExcludeFiles 。将/xf $ExcludeFiles替换为:

/xf ($ExcludeFiles + (Get-ChildItem -File $Source -Name | ?{$_ -notmatch '\.'}))    

为了与低于3.0的PowerShell兼容,不支持 Get-ChildItem -File 开关,请改用:

/xf ($ExcludeFiles + (Get-ChildItem $Source | ?{! $_.PSIsContainer} | select -ExpandProperty Name | ?{$_ -notmatch '\.'})) 

根据定义,带扩展名的文件是名称中带有圆点的文件,因此$_ -notmatch '\.'仅选择没有扩展名的名称。