我是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
选项找到解决方法。可以这样做,还是我需要探索另一种方法来处理没有扩展名的文件?
答案 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 '\.'
仅选择没有扩展名的名称。