CDs Automatisch auf HDD kopieren
hey
ich stehe gerade etwas auf dem Schlauch.
ich habe hier ca 100-500 CD liegen mit Daten. Ich würde gerne jede CD auf die Festplatte 1 zu 1 kopieren ohne ständig irgend etwas am Rechner zu machen.
idealerweise so:
CD einlegen -> wird automatisch erkannt und dann wird gleich alles von der CD Kopiert in ein Laufwerk meiner wahl, nur immer wieder ein Ordner erstellt , egal ob vortlaufende nummer oder Datum+zeit. Wenn das Kopieren durch ist, wird die CD ausgeworfen und wird gewartet bis eine neue CD erkannt ist. dann gehts wieder von vorne los.
dachte in AutoIT könnte man das machen, aber hier stehe ich total auf dem schlauch...
ich weiß das man mit
die CD auswerfen kann.
ich weiß nur noch nicht wie ich das kopieren hin bekomme das immer ein neuer Ordner erstellt wird ...
ich stehe gerade etwas auf dem Schlauch.
ich habe hier ca 100-500 CD liegen mit Daten. Ich würde gerne jede CD auf die Festplatte 1 zu 1 kopieren ohne ständig irgend etwas am Rechner zu machen.
idealerweise so:
CD einlegen -> wird automatisch erkannt und dann wird gleich alles von der CD Kopiert in ein Laufwerk meiner wahl, nur immer wieder ein Ordner erstellt , egal ob vortlaufende nummer oder Datum+zeit. Wenn das Kopieren durch ist, wird die CD ausgeworfen und wird gewartet bis eine neue CD erkannt ist. dann gehts wieder von vorne los.
dachte in AutoIT könnte man das machen, aber hier stehe ich total auf dem schlauch...
ich weiß das man mit
Local $aCDRom = DriveGetDrive($DT_CDROM)
CDTray($aCDRom[1], $CDTRAY_OPEN)
ich weiß nur noch nicht wie ich das kopieren hin bekomme das immer ein neuer Ordner erstellt wird ...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 372904
Url: https://administrator.de/contentid/372904
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
12 Kommentare
Neuester Kommentar
Zitat von @SlainteMhath:
Und Windows... evtl. mit Powershell? Endlosschleife, die das Laufwerk überwacht, dann kopiert und auswirft und dann wieder wartet...
ist ne IdeeUnd Windows... evtl. mit Powershell? Endlosschleife, die das Laufwerk überwacht, dann kopiert und auswirft und dann wieder wartet...
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
https://gallery.technet.microsoft.com/scriptcenter/EjectClose-CDDVD-driv ...
Servus Yellowcake,
das ist schnell gemacht.
Hier mal als Powershell-Skript:
(Variablen im Kopf füllen, starten, CDs einfach nacheinander einlegen, freuen )
Grüße Uwe
das ist schnell gemacht.
Hier mal als Powershell-Skript:
(Variablen im Kopf füllen, starten, CDs einfach nacheinander einlegen, freuen )
<#
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, Description@{n='DiskSize';e={'{0:N2} MB' -f ($_.Size / 1MB)}} | 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}
Zitat von @Yellowcake:
wobei
die CMD Datei selber ist der loop für loser ;)
läuft super
wobei
c:\temp\cd\test.cmd
läuft super
Stack overflow!!eins!elf!!!
lks
PS. Guck mal auf den Speicherverbrauch, Sollte zwar unkritisch sein, aber je nachdem, wieviele rekursive Aufrufe Du hast, könnte das schon zu Problemen führen.
Sorry, aber nein, das hast du nicht.
Gruß
powershell (New-Object -com "WMPlayer.OCX.7").cdromcollection.item(0).eject()
wie man im Internet mehrfach lesen kann, die ätzendste "Lösung", um ein Laufwerk zu öffnen. Nur mal am Rande gefragt, weißt du genau, was diese Zeile macht?wobei
die CMD Datei selber ist der loop für loser ;)
nope - das ist keine Schleife! lks hat es schon richtig beschrieben!c:\temp\cd\test.cmd
läuft super
dein Elan in allen Ehren (und ich finde es wirklich gut, dass du trotz fertiger Lösung dir eine eigene gesucht hast), aber das was du da gebastelt hast, ist übelster Stil. Sowas kann echt "lustige" Nebeneffekte habe...Gruß
aber ich versuche gerade auch die Powershell Lösung zu verstehen, steige aber noch nicht da hinter. und was nutzen was man nicht versteht ist ja auch doof...
Dafür habe ich doch extra alle Zeilen mit Kommentaren versehen ?!Wenn noch Fragen sind einfach fragen.
Machen lässt sich das mit fast allen Skript und Programmiersprachen. Vorgehensweise ist dabei immer ähnlich:
- WMI Event (Win32_LogicalDisk) mit WQL für Laufwerk abonnieren (Das Event sagt dem Skript wann eine neue CD eingelegt wurde)
- Dem Event die entsprechende Aktion zuweisen
Hier noch für die Auto-It Fraktion ...Starten, CDs nacheinander einlegen und Kaffee trinken gehen.
Das sollte es für's Thema nun gewesen sein.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
#include <Date.au3>
; Laufwerk
$drive = "E:"
; Zielordner
$target = "D:\temp"
; Dauerschleife
while 1
; Wenn Laufwerk READY dann fange an zu kopieren
if DriveStatus($drive & "\") = "READY" then
; aktuelles Datum holen
$tm = _Date_Time_GetSystemTime()
; Zielordner zusammensetzen
$destinationFolder = $target & "\disk_" & StringRegExpReplace(_Date_Time_SystemTimeToDateTimeStr($tm,1),"[/:\s]","")
; Inhalt der CD kopieren
DirCopy($drive,$destinationFolder)
; Disk auswerfen
CDTray($drive,"open")
EndIf
; schlafen legen bis nächste Disk eingelegt wurde
while DriveStatus($drive & "\") <> "READY"
Sleep(1)
WEnd
Wend
Das sollte es für's Thema nun gewesen sein.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.