powershell 是否使用robocopy排除无扩展名的文件?

pbpqsu0x  于 2023-03-23  发布在  Shell
关注(0)|答案(2)|浏览(165)

我是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选项来做到这一点。可以做到这一点吗?或者我需要探索另一种方法来处理排除没有扩展名的文件?

7jmck4yq

7jmck4yq1#

使用正则表达式过滤**$Source中的文件列表,得到不带扩展名的文件列表,并将该列表添加到$ExcludeFiles**中。将/xf $ExcludeFiles替换为:

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

为了与PowerShell 3.0以下版本兼容,这些版本不支持Get-ChildItem的**-File**开关,请使用以下命令:

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

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

w80xi6nr

w80xi6nr2#

我用的是/xf *.?,它似乎起作用了。它也错过了所有带有单字母扩展名的文件,但我没有任何我关心的文件:-)

相关问题