排除根目录中的文件,但不排除子文件夹中的文件

时间:2015-06-04 18:06:24

标签: powershell

是否可以从C:\?

中仅复制额外用户文件夹

实施例

排除所有系统和隐藏文件夹(程序文件,用户,Windows和所有其他隐藏文件夹)然后只从ROOT中排除.txt .log .exe等...但是如果它们在子文件夹中则复制?

这是我到目前为止所拥有的

$asset = Read-Host "What is the Asset Number?"
$useraiu = Read-Host "What is the user's AIU?"

$source = "\\$asset\C$\"
$dest = "C:\Temp\Dest"

$excludedFolders = '_SMSTaskSequence','inetpub','Program Files','Program Files (x86)','Swsetup','Users','Windows','CCM','Notes'

$myFolders = Get-ChildItem  -Path "\\$asset\C$\" -Directory | where { $_ -notin $excludedFolders }

$myFolders | foreach { robocopy $_  $dest /S /Z /MT /XJD /XA:SH /log+:"\\server\path\path\%asset%-to-%computername%-Transfer-Log.log" /NP /FP /V /TEE}

Read-Host "Press ENTER to quit"

我从Robocopy获得此输出

 Log File : \\server\path\path\%asset%-to-%computername%-Transfer-Log.log

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows                              
-------------------------------------------------------------------------------

  Started : Mon Jun 08 11:11:28 2015

   Source : C:\WINDOWS\system32\Temp\
     Dest : C:\Temp\Dest\

    Files : *.*

  Options : *.* /V /FP /TEE /S /COPY:DAT /Z /NP /XJD /XA:SH /MT:8 /R:1000000 /W:30 

------------------------------------------------------------------------------

2015/06/08 11:11:28 ERROR 2 (0x00000002) Accessing Source Directory C:\WINDOWS\system32\Temp\
The system cannot find the file specified.

1 个答案:

答案 0 :(得分:1)

Get-Childitem会自动排除隐藏文件夹。如果需要包含它们,请使用-Force参数。如果您想要使用'系统'属性,然后您可以将其传递给where { $_.Attributes -contains 'System' }。但是,我认为这不会起作用,因为您命名的文件夹不具备“系统”功能。属性(至少在我的Windows 8.1系统上)。

如果您有要排除的确切文件夹的列表,则可以使用where子句将其排除。

$excludedFolders = 'Users','Windows','Program Files','Program Files (x86)'

$myFolders = gci -Path 'C:\' -Directory | where { $_ -notin $excludedFolders }

此时,$ myFolders是C:\下的非隐藏目录列表,不包括您指定的目录。然后,您可以使用foreach来复制。

$myFolders | foreach { yourCopyFunction -Source $_ }