CD-Namen auslesen
Hallo zusammen,
ich möchte von einem Client-PC mit XP Pro, CD's auf ein vordefiniertes Netzlaufwerk auf dem Server Windows 2003 kopieren. Dabei soll beim starten des Programmes der CD-Namen ausgelesen werden und somit in ein dafür erstelltes Netzlaufwerk die Dateien kopieren. Vorher soll natürlich rekursiv alle Dateien auf diesesm bzw. in diesem Netzwerkordner gelöscht werden. Muß idiotensicher sein, Praktikanten sollen nämlich einfach die CD'S einlegen und das Programm starten und den Rest erledigt das Programm!!
Grüße Swen
P.S.: Ich hoffe jmand kann mir helfen, bin nämlich schon ein BATCHen Neuling.
ich möchte von einem Client-PC mit XP Pro, CD's auf ein vordefiniertes Netzlaufwerk auf dem Server Windows 2003 kopieren. Dabei soll beim starten des Programmes der CD-Namen ausgelesen werden und somit in ein dafür erstelltes Netzlaufwerk die Dateien kopieren. Vorher soll natürlich rekursiv alle Dateien auf diesesm bzw. in diesem Netzwerkordner gelöscht werden. Muß idiotensicher sein, Praktikanten sollen nämlich einfach die CD'S einlegen und das Programm starten und den Rest erledigt das Programm!!
Grüße Swen
P.S.: Ich hoffe jmand kann mir helfen, bin nämlich schon ein BATCHen Neuling.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 50737
Url: https://administrator.de/contentid/50737
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo Swenni2k und willkommen im Forum!
Zwar ließe sich der Name über einen "dir"-Befehl herausfinden, aber in diesem Fall (und diversen anderen ) greife ich lieber zu VBScript bzw einer Kombination aus Batch und Script.
Zunächst zum Script:
Speichere dieses Script an einem passenden Ort (zB in "C:\Scripts") und sorge für Lesezugriff darauf.
Hinweis zum Ergebnis des Scripts: Der Name wird in Anführungszeichen eingeschlossen und der Laufwerksbuchstabe durch eine Leerstelle getrennt übergeben.
Bei Verwendung des folgenden Batches werden Name und Laufwerksbuchstabe aller in CD-Laufwerken befindlichen lesbaren CD/DVD (also etwa auch eines Brenners) in Systemvariable %CDName% und %CDDrive% gespeichert und ausgegeben (falls nicht gewünscht, "echo ..." entfernen). Einschränkung: Sind in mehreren Laufwerken CD oder DVD eingelegt, werden die Informationen nur für das Letzte gespeichert (ausgegeben werden aber alle).
In weiterer Folge kann dann mit diesen Variablen weitergearbeitet werden, zB
Grüße
bastla
[Edit] Pfad "C:\Scripts" korrigiert (Text und Batch stimmen jetzt überein) [/Edit]
[Edit2] ":" wird jetzt immer vom Script ausgegeben, muss nicht im Batch eingesetzt werden [/Edit2]
Zwar ließe sich der Name über einen "dir"-Befehl herausfinden, aber in diesem Fall (und diversen anderen ) greife ich lieber zu VBScript bzw einer Kombination aus Batch und Script.
Zunächst zum Script:
'GetReadyCDDrives.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set dc = fso.Drives
out = ""
For Each d in dc
If d.drivetype = 4 and d.IsReady Then
If out <> "" Then
out = out & vbCrLF & Chr(34) & d.VolumeName & Chr(34) & " " & d.DriveLetter & ":"
Else
out = Chr(34) & d.VolumeName & Chr(34) & " " & d.DriveLetter & ":"
End If
End If
Next
WScript.Echo out
Hinweis zum Ergebnis des Scripts: Der Name wird in Anführungszeichen eingeschlossen und der Laufwerksbuchstabe durch eine Leerstelle getrennt übergeben.
Bei Verwendung des folgenden Batches werden Name und Laufwerksbuchstabe aller in CD-Laufwerken befindlichen lesbaren CD/DVD (also etwa auch eines Brenners) in Systemvariable %CDName% und %CDDrive% gespeichert und ausgegeben (falls nicht gewünscht, "echo ..." entfernen). Einschränkung: Sind in mehreren Laufwerken CD oder DVD eingelegt, werden die Informationen nur für das Letzte gespeichert (ausgegeben werden aber alle).
@echo off
for /f "tokens=1,2" %%i in ('cscript //nologo C:\Scripts\EnumerateReadyCDDrives.vbs') do (set "CDName=%%~i") & (set CDDrive=%%j) & echo %%~i - %%j
xcopy /s /y /i %CDDrive%\*.* "\\Server\Freigabe\%CDName%"
Grüße
bastla
[Edit] Pfad "C:\Scripts" korrigiert (Text und Batch stimmen jetzt überein) [/Edit]
[Edit2] ":" wird jetzt immer vom Script ausgegeben, muss nicht im Batch eingesetzt werden [/Edit2]
Hallo Swenni2k!
Mit dem ":" hattest Du teilweise recht - bei nur einem passenden CD-Laufwerk fehlte er leider - hab's jetzt oben so geändert, dass das Script immer eine vollständige Laufwerksangabe liefert - daher im Batch entfernen (man/frau/kind muss sich das Leben ja nicht unnötig schwer machen ).
Vergleichsoperatoren in Batch kannst Du mit "if /?" anzeigen lassen - hier könnte das so aussehen (ich hoffe, ich habe Dich richtig verstanden):
Wenn die CD-Namen nicht direkt verwendet werden können (wie ich's oben versucht hatte), musst Du eben für jede Einzelne eine entsprechende Zeile schreiben.
Ganz kurz: "goto :eof" beendet einen Programmteil (bei einem mit "call" aufgerufenen Unterprogramm steht es für "Return").
Die Schleife für's "rd" soll alle Verzeichnisse aus dem Netzlaufwerk entfernen, indem zunächst nur Verzeichnisse aufgelistet und diese einzeln abgearbeitet werden.
Loggen mit Umleitung der Ausgabe ">>Log.txt" kannst Du im Prinzip überall (durch Anhängen an Befehle oder selbst erstellte Ausgaben mit "echo"), wobei sich für die Logdatei auch eine Variable anbietet (Wartbarkeit). Der Unterschied zwischen ">" und ">>" wird Dir sicher schon bekannt sein (oder sehr bald ).
Mehr Zeit habe ich gerade nicht, daher Status "alles ungetestet" ...
Grüße
bastla
Mit dem ":" hattest Du teilweise recht - bei nur einem passenden CD-Laufwerk fehlte er leider - hab's jetzt oben so geändert, dass das Script immer eine vollständige Laufwerksangabe liefert - daher im Batch entfernen (man/frau/kind muss sich das Leben ja nicht unnötig schwer machen ).
Vergleichsoperatoren in Batch kannst Du mit "if /?" anzeigen lassen - hier könnte das so aussehen (ich hoffe, ich habe Dich richtig verstanden):
if [%CDName%]==[CD1] (set "UNC=\\Tolle-Wurst\Freigabe") & goto :DoIt
if [%CDName%]==[CD2] (set "UNC=\\Prima_Ballarihna\Freigabe") & goto :DoIt
...
goto :eof
:DoIt
del /q "%UNC%\*.*"
for /f "delims=" %%i in ('dir /b /ad "%UNC%"') do rd /s /q "%%i"
xcopy /s /y /i "%CDDrive%\*.* "%UNC%"
goto :eof
Ganz kurz: "goto :eof" beendet einen Programmteil (bei einem mit "call" aufgerufenen Unterprogramm steht es für "Return").
Die Schleife für's "rd" soll alle Verzeichnisse aus dem Netzlaufwerk entfernen, indem zunächst nur Verzeichnisse aufgelistet und diese einzeln abgearbeitet werden.
Loggen mit Umleitung der Ausgabe ">>Log.txt" kannst Du im Prinzip überall (durch Anhängen an Befehle oder selbst erstellte Ausgaben mit "echo"), wobei sich für die Logdatei auch eine Variable anbietet (Wartbarkeit). Der Unterschied zwischen ">" und ">>" wird Dir sicher schon bekannt sein (oder sehr bald ).
Mehr Zeit habe ich gerade nicht, daher Status "alles ungetestet" ...
HOWTO oder eine gute Seite
Schau Dich im Forum um - vor allem wo Biber draufsteht, ist Gutes drin (zB Tutorials) - und ansonsten üben, üben, üben, ...Grüße
bastla