28okn28
Goto Top

CD automatisch kopieren

Hii,

ich habe hier paar CD's liegen mit Daten.
Ich möchte gerne jede CD ins Netzwerklaufwerk kopieren ohne Textdateien.

CD einlegen -> wird automatisch erkannt und dann wird gleich alles von der CD kopiert außer Textdateien in ein Netzwerklaufwerk meiner Wahl,
Es soll immer wieder ein Ordner erstellt werden.
Wenn das Kopieren durch ist, wird die CD ausgeworfen und wird gewartet bis eine neue CD erkannt ist.
Dann geht es wieder von vorne los.

Content-Key: 423593

Url: https://administrator.de/contentid/423593

Printed on: April 19, 2024 at 18:04 o'clock

Member: NetzwerkDude
NetzwerkDude Mar 01, 2019 at 11:21:57 (UTC)
Goto Top
Was hast du den bisher so an Code?
So als Anhanltspunkt, falls es ein Windows System ist: Die WMI Win32_CDROMDrive Klasse liefert u.a. eine .MediaLoaded Property als bool zurück, damit kann man das CD laufwerk auf vorhandensein von CDs prüfen
Member: 28okn28
28okn28 Mar 01, 2019 at 11:30:45 (UTC)
Goto Top
<#
    AUTO COPY DISK ON INSERT
#>
# ==============
# drive letter to monitor
$drive = 'E:'  
# backup root folder
$target = 'D:\Backup'  
# =============
# only continue if PS >= Version 3.0
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}  
# create root folder if not exist
if (!(Test-Path $target)) {md $target -Force | out-null}

# delete eventcubscriber if there are still open ones
Get-EventSubscriber | Unregister-Event -Force
# shell object
$global:shell = New-Object -Com Shell.Application

# WMI Event Registration (Action fires when CD-Drive changes it's state)  
Register-WmiEvent -Query "Select * From __InstanceModificationEvent Within 1 where TargetInstance isa 'Win32_LogicalDisk' and TargetInstance.DriveType = 5 and TargetInstance.Size != null and TargetInstance.DeviceId = '$drive'" -SourceIdentifier 'RemovableDetector' -Action {  
    $deviceid = $Event.SourceEventArgs.NewEvent.TargetInstance.DeviceID
    $volserial = $Event.SourceEventArgs.NewEvent.TargetInstance.VolumeSerialNumber
    # create target subfolder with name format "disk_volumeserial_(datetime)"  
    $targetfolder = "$target\Disk_${volserial}_$(get-date -f yyyyMMdd-HHmmss)"  
    md $targetfolder -Force | out-null

    # list drive information
    write-host "New disk loaded." -F Green  
    write-host ($Event.SourceEventArgs.NewEvent.TargetInstance | select DeviceId | ft -AutoSize | out-string)
    
    write-host "Start copying disk to '$targetfolder' ... " -NoNewline -F Green  
    # copy to target
    copy-item "$deviceid\*" -Recurse -Destination $targetfolder -Force  
    # eject disk
    write-host "Finished. Ejecting disk '$deviceid' ..." -F Green  
    $global:shell.Namespace(17).ParseName($deviceid).Verbs() | ?{$_.Name.replace('&','') -match '^(Auswerfen|Eject)$'} | %{$_.Doit()}  
    write-host 'Waiting for next disk ...' -F Green  
} | out-null
cls
write-host 'Waiting for disk ...' -F Green  
while($true){sleep 1}



Dieses Code habe ich hier aus dem Forum.
Das funktioniert auch mit einem Netzwerklaufwerk.

Ich möchte das er die Textdokumente nicht mit kopiert, dazu habe ich -exclude befehl gefunden (Powershell).
Weiß aber nicht wie ich es in den Quellcode hinzufüge.

Member: NetzwerkDude
Solution NetzwerkDude Mar 01, 2019 at 11:34:38 (UTC)
Goto Top
Zeile 34 ist es:
copy-item "$deviceid\*" -Recurse -Destination $targetfolder -Force -exclude *.txt  
Member: 28okn28
28okn28 Mar 01, 2019 at 11:40:39 (UTC)
Goto Top
Vielen Dank. Hat geklappt.