【问题标题】:powershell copy disk excluding particular file typespowershell 复制磁盘,不包括特定文件类型
【发布时间】:2014-03-26 20:44:10
【问题描述】:

我正在编写一个 PowerShell 2 脚本,该脚本将读取 CD-ROM 或 DVD 磁盘并复制其内容 - 需要注意的是,我需要检查某些文件类型,而不是使用该文件类型复制任何内容。到目前为止,我有这个工作:

$user = read-host "Enter owner's username:"
$drv = read-host "Enter Optical Drive letter (no colons or slashes):"

$list = Import-Csv badtypes.csv
$badlist = @()
$Extns = @()

ForEach($xt in $list)
{
    $Extns += "."_$xt.Extention
}

$filepath = $drv +":\"
$cnts = Get-ChildItem $filepath -r

ForEach($itm in $cnts)
{
   if($itm.PSis.Container)
   {
       #write new folder name in user's temporary folder
   }
   else
   {
       CheckFile $itm
   }
}

Function CheckFile($fl)
{
    $fildextension = [System.IO.Path]::GetExtention($fl)

    $badfound = 0

    ForEach($a in $Extns)
    {
        if($a -eq $fildextension)
        {
           $badfound = 1
        }
    }

    if(badfound -eq 0)
    {
       write-host "File Type Acceptable:" $fl
       # write file to proper place in the user's temporary folder 
    }
}

我在获取在正确位置创建的空文件夹并将(可接受的)文件复制到正确位置时遇到问题。

任何帮助将不胜感激!

【问题讨论】:

  • 您是否考虑过为此使用 ROBOCOPY?它是高度可配置的,返回可用的退出代码和日志文件。

标签: file powershell copy


【解决方案1】:

坚持使用 powershell 解决方案,试试这个尺寸:

$user = read-host "Enter owner's username:"
$drv = read-host "Enter Optical Drive letter (no colons or slashes):"

$list = Import-Csv badtypes.csv
$Exclusions = "*.$($list.Extension -join ",*.")"
$DestFolder = New-Item -path "\\BAAC\homedir\$user\transfer\$(get-date -f MMddyyyy.HH.mm)"  -ItemType Directory
$FilePath = $drv +":\"

Write-Host "Copying files from $FilePath to $DestFolder`:"

Copy-Item "$FilePath*" -Destination $DestFolder -Exclude $Exclusions -Recurse -PassThru
explorer $DestFolder

其实不需要用户名,但我把它留在那里了。以下是脚本将执行的操作:

  • 它获取驱动器号
  • 导入要排除的扩展列表,从中构建一个字符串(如果您的 CSV 有 3 个条目是 bat、exe 和 com,则结果字符串将类似于“*.bat,*.exe,*.com”)。
  • 它会在所需文件夹中创建一个日期/时间格式的文件夹
  • 然后它递归地将文件和文件夹复制到新文件夹中,排除排除列表中的任何内容。
  • 最后,它会打开一个 Windows 资源管理器窗口,指向创建的包含所有最近复制的文件和文件夹的目标文件夹。

编辑:更新为使用注释中指定的路径。如果此答案为您的问题提供了解决方案,请将其标记为选定答案,以便未来用户可以找到并使用它,而无需重复提问。

【讨论】:

  • 谢谢!因此,用户临时文件夹的路径会很奇怪,因为执行此操作的人不是媒体的所有者。因此,我还必须获得一个服务帐户(用于此类脚本的管理员)来编写文件。该目录将类似于:\\BAAC\homedir\username\transfer\newFolderNameByDate.hour.minute
  • 我已更新我的答案以匹配您的目标路径,如果它为您的问题提供了解决方案,请将答案标记为解决方案。
  • 太棒了!我也能够让它工作,但你的版本更时尚!我将此作为解决方案进行了检查-希望我可以投票。再次感谢您!
  • 老鼠!需要排除的文件类型正在通过
  • 您的排除输入文件究竟是什么样的?我不需要整个东西,但是包含任何标题的样本会很好。我测试了这段代码,所以它不应该让事情通过,除非我认为你的 CSV 内容有误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 2016-02-25
  • 2014-01-29
  • 2012-02-08
相关资源
最近更新 更多