2014-03-26 89 views
0

我正在研究PowerShell 2腳本,它將讀取CD-ROM或DVD磁盤並複製它的內容 - 需要注意的是我需要檢查某些文件類型並且不要複製任何內容與該文件類型。到目前爲止,我有這方面的工作:powershell複製磁盤不包括特定的文件類型

$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 
    } 
} 

我有一個問題讓在正確的位置創建一個空文件夾,並複製(接受)文件複製到適當的位置。

任何幫助,將不勝感激!

+3

您是否考慮過使用ROBOCOPY?它高度可配置,返回可用的退出代碼和日誌文件。 – andyb

回答

0

用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 

並不真正需要用戶的姓名,但我把它在那裏。這裏的腳本會做什麼:

  • 它得到的驅動器盤符
  • 導入擴展排除列表中,建立從他們的字符串(結果字符串將類似於「*.bat,*.exe,*.com」如果你的CSV有3項被蝙蝠,exe和com)。
  • 它在所需的文件夾中創建日期/時間格式的文件夾
  • 然後,將文件和文件夾遞歸複製到除排除列表上的任何內容之外的新文件夾。
  • 最後,它會打開一個Windows資源管理器窗口,其中包含所有最近複製的文件和文件夾。

編輯:更新爲使用評論中指定的路徑。如果此答案爲您的問題提供瞭解決方案,請將其標記爲選定的答案,以便將來的用戶可以找到並使用它,而不必重複提問。

+0

謝謝!因此,執行此操作的人員不是媒體的所有者,因此用戶臨時文件夾的路徑將很奇怪。因此,我還必須獲得一個服務帳戶(用於這些腳本的管理員)來編寫這些文件。該目錄將如下所示:\\ BAAC \ homedir \ username \ transfer \ newFolderNameByDate.hour.minute – Potemkyn

+0

我已更新我的答案以匹配您的目標路徑,請將答案標記爲解決方案,如果它爲您的問題提供解決方案。 – TheMadTechnician

+0

太棒了!我也能夠得到這個工作,但你的版本更加時尚!我檢查了這個解決方案 - 希望我可以投票。再次感謝你! – Potemkyn