28okn28

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.
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 423593

Url: https://administrator.de/forum/cd-automatisch-kopieren-423593.html

Ausgedruckt am: 16.05.2025 um 21:05 Uhr

NetzwerkDude
NetzwerkDude 01.03.2019 um 12:21:57 Uhr
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
28okn28
28okn28 01.03.2019 um 12:30:45 Uhr
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.

NetzwerkDude
Lösung NetzwerkDude 01.03.2019 um 12:34:38 Uhr
Goto Top
Zeile 34 ist es:
copy-item "$deviceid\*" -Recurse -Destination $targetfolder -Force -exclude *.txt  
28okn28
28okn28 01.03.2019 um 12:40:39 Uhr
Goto Top
Vielen Dank. Hat geklappt.