当前位置: 首页 > 知识库问答 >
问题:

获取部分排除的子项

井逸明
2023-03-14

Get-ChildItem有一个奇怪的问题。我正在尝试在C:驱动器中搜索office文件,但排除其中的一些文件夹。我为此尝试了很多方法。我首先尝试使用Copy-Item直接排除,但没有成功。然后我尝试了Get-ChildItem,但在某些文件夹处停止显示访问被拒绝。

我在这个链接中尝试了这个方法。如果我只做一个文件夹,它会像预期的那样跳过它。但其他一些文件夹会被搜索,即使该文件夹在排除列表中。

这是我的代码。

$source = "C:\"
$destination = "C:\Backup"
$Exclude =  @('*C:\PerfLogs*' , "Backup" , "boot" , "MSOCache" , "programdata" , "Recovery" ,        "TrueDelete" , "Users", "Windows", "Documents and Settings", "Program Files (x86)\Google\" , "System   Volume Information" , "`$Recycle.Bin" , "Config.Msi" , "bmm")
$includes ="*.xls " , "*.xlsx" , "*.doc" , "*.docx" , "*.ppt" , "*.pptx"
$items = Get-ChildItem $source -Recurse -Exclude $exclude -Include $includes | ?{ $_.fullname -notmatch "\\perflogs\\?" -or "\\backup\\?" } | Copy-Item -Destination $Destination -Container -Force

我最初想用文件夹树复制所有内容,但这也不起作用。运行此代码后,它首先停在“Perflgs”处,如果我让它继续,它只是搜索并拒绝访问排除列表中的其他一些文件夹。

Get-ChildItem:拒绝访问路径“C:\PerfLogs\”。位于C:\pstools\backup\2。ps1:6 char:10$items=Get ChildItem$source-Recurse-Exclude$Exclude-Include$includes |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

干杯

共有1个答案

马泰
2023-03-14
$source = "C:\"
$destination = "C:\Backup"
$Exclude =  @("PerfLogs","Backup","boot","MSOCache","programdata","Recovery","TrueDelete","Users","Windows","Documents and Settings","Program Files \(x86\)\\Google\\","System Volume Information" ,'\$Recycle\.Bin',"Config\.Msi","bmm")
$includes ="*.xls " , "*.xlsx" , "*.doc" , "*.docx" , "*.ppt" , "*.pptx"
$regex = "($($Exclude -join "|"))"
$items = Get-ChildItem $source -Recurse -Include $includes -ErrorAction SilentlyContinue | 
        ?{ $_.fullname -notmatch $regex } #| Copy-Item -Destination $Destination -Container -Force

我认为它不会在读取之前排除目录,因此会出现错误。一个比较简单的方法是读取它可以读取的所有目录和文件(是的,我知道它很慢),因为它不能以提升的权限运行。在能够读取的文件上,它将使用一个Where Object to notmatch-regex字符串,该字符串是从变量exclude构建的。正如您将看到的那样,我不得不为regex转义一些字符。因此,任何包含这些单词的文件都将被排除在外。

警告

此时,它将排除备份。docx。如果这是一个问题,您可以将$Exclude中的“backup”编辑为“\\ backup\”,以仅排除该目录中的文件。由于regex是一个控制字符,因此需要再次使用\。您可以在感觉复制项正常工作时取消对其的注释。

测试样品

在我自己的计算机上运行此未提升返回来自以下目录的17个文件。

C:\Program Files (x86)\InstallShield\2014\Samples\InstallScript\Cumulative Setu...
C:\Program Files (x86)\InstallShield\2014\Samples\InstallScript\Platform Suites...
C:\Program Files (x86)\InstallShield\2014\Samples\InstallScript\Serial Number V...
C:\Program Files (x86)\LibreOffice 3.6\program\python-core-2.6.1\lib              
C:\Program Files (x86)\Microsoft Office\Office14\1033                             
C:\Program Files (x86)\Simon Sez IT\SharePoint Foundation 2013 Training\exercis...
C:\Temp    
 类似资料:
  • 我有三个分级模块:ModA模块、ModB模块和ModC模块 ModA依赖于ModB和Spring Web MVC 3.2.6 ModC依赖于Spring Web MVC 4.1.5 我得到了相当多的错误,因为ModA拉进来,使用的是Spring4.1.5而不是3.2.6。由于版本差异和时间,我现在无法将ModA更新到Spring4.1.5。我想做的是将Spring4.1.5从ModA Gradle

  • sp_get_child_terms($term_id) 功能: 返回指定分类下的子分类 参数: $term_id:分类id 返回: 类型数组,指定分类下的子分类 示例: <?php $term_id=1; $terms=sp_get_child_terms($term_id ); //获取子分类信息 print_r($terms); //打印出子分类信息 ?> 返回数组item说明:

  • 问题内容: 如何从URL获取特定的路径部分?例如,我想要一个对此进行操作的函数: 并返回“ hithere” 或对此进行操作: 并返回相同的内容(“ hithere”) 我知道这可能会使用urllib或urllib2,但我无法从文档中弄清楚如何仅获取路径的一部分。 问题答案: 使用urlparse提取URL的路径部分: 使用os.path.split将路径拆分为组件: dirname和basena

  • 问题内容: 使用JavaScript从URL中仅提取路径的正确方法是什么? 但我只想获得 / account / search 这部分 我正在使用jQuery,如果有可以利用的地方。 问题答案: 内置对象的一个属性将为当前窗口提供该属性。 更新,对任何URL使用相同的属性: 事实证明,此模式已被标准化为称为 URLUtils的接口,您猜怎么着?现有对象 和锚元素均 实现该接口。 因此,您可以对 任

  • 问题内容: 我只是想知道如何使用PHP提取URL的最后一部分。 示例URL是: 现在如何使用PHP提取最后一部分? URL中始终有相同数量的变量,并且id始终在末尾。 问题答案: 您可以使用来匹配所需的URL部分。 在这种情况下,由于该模式很简单,因此我们正在寻找一个正斜杠(并且由于正斜杠表示正则表达式模式的开始和结束,因此我们必须对其进行转义),以及一个或多个数字()字符串()的末尾。圆括号用于

  • 我有一个HashMap(字符串,对象)。键是多个唯一ID的组合。我有一个输入,一个字符串是键的一部分(1个唯一ID)。我需要使用键的这一部分在HashMap中获取值,而无需在HashMap中迭代数千个值。 我们可以使用HashMap.get()中的任何正则表达式实现它吗? 我的钥匙是xxx。yyy年。zzz,其中xxx的组合。zzz在整个地图上都是独一无二的。我有xxx和zzz作为输入。此外,我还