Leere Datei erkennen
Hallo,
irgendwie steh' ich etwas auf dem Schlauch und komm' nicht weiter, dabei sieht es so simpel aus...
Ich versuche in einer Batch einen Kopier-Job zu starten, der allerdings erst einmal prüft, ob die Datein auf einer eingeschobenen CD/DVD liegen, oder ober er lieber im Netz nachschauen soll. Das Kopieren ist dabei nicht das Problem, auch nicht die Verbindung zum Netz.
Das Problem ist die Erkennung des CD/DVD Laufwerksbuchstabens. Dafür habe ich mir ein Skript gebastelt (unter Mithilfe einiger Biber'scher und BASTLAscher Beiträge... ) und es funktioniert sogar: GetCDDriveLetter.vbs (kann man vielleicht noch 'mal brauchen, verbessern, oder gar verBASTLAn/verBIBERn...
Aufgerufen wird das VBScript in einer Batch und das Ergebnis in einer Datei abgelegt:
Nun durchforste ich diese Datei (sollte ja bestenfalls nur ein einziges Zeichen sein) und setze meine Variable "sourcepath" für den Pfad:
Dies funktioniert auch, aber nur dann, wenn auch eine CD/DVD eingelegt ist. Ist dies nicht der Fall, dann ist die Datei %tmpdvdlog% leer und es wird nix gesetzt, was so nicht beabsichtigt war... schließlich brauche ich ja einen Pfad...
Schön wäre jetzt, wenn ich einfach Folgendes in der For-Schleife machen könnte:
Und genau das funktioniert nicht... es wird nix gesetzt, ein echo %sourcepath% bringt nur die Meldung, dass echo off ist...
Es ist irgendetwas mit dem IF, aber ich komme nicht 'drauf. Ich denke es ist eine Kleinigkeit, aber diese hält mich etwas auf... (vielleicht ist es auch einfach zu spät?)
Gute Nacht
Axel
irgendwie steh' ich etwas auf dem Schlauch und komm' nicht weiter, dabei sieht es so simpel aus...
Ich versuche in einer Batch einen Kopier-Job zu starten, der allerdings erst einmal prüft, ob die Datein auf einer eingeschobenen CD/DVD liegen, oder ober er lieber im Netz nachschauen soll. Das Kopieren ist dabei nicht das Problem, auch nicht die Verbindung zum Netz.
Das Problem ist die Erkennung des CD/DVD Laufwerksbuchstabens. Dafür habe ich mir ein Skript gebastelt (unter Mithilfe einiger Biber'scher und BASTLAscher Beiträge... ) und es funktioniert sogar: GetCDDriveLetter.vbs (kann man vielleicht noch 'mal brauchen, verbessern, oder gar verBASTLAn/verBIBERn...
On Error Resume Next
Dim objFSO
Dim objFile
Dim objFolder
Dim strDateiname
Dim strPFAD
Dim mysource
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Drives = FSO.Drives
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
strDateiname = WScript.ScriptFullName
Set objFolder = objFSO.getFolder(objFSO.getParentFolderName(strDateiname))
strDateiname = objFSO.getFileName(strDateiname)
Set colItems = objWMIService.ExecQuery("Select * from Win32_CDROMDrive")
For Each objItem In colItems
If objItem.MediaLoaded = vbTrue Then
If (objFSO.FileExists(objItem.Drive & "\historie.txt")) Then
mysource = objItem.Drive
'MsgBox "Verzeichnis vorhanden und Datei vorhanden!" & mysource & "\historie.txt"
WScript.echo mysource
End If
End If
Next
Set Drives = Nothing
Set objFSO = Nothing
wscript.quit
Aufgerufen wird das VBScript in einer Batch und das Ergebnis in einer Datei abgelegt:
set sourcepath=
set tmpdirlog=c:\temp\dvddir.log
cscript //nologo %~dp0\GetCDDriveLetter.vbs >%tmpdvdlog%
Nun durchforste ich diese Datei (sollte ja bestenfalls nur ein einziges Zeichen sein) und setze meine Variable "sourcepath" für den Pfad:
for /F %%i in (%tmpdvdlog%) do (set sourcepath=%%i)
Dies funktioniert auch, aber nur dann, wenn auch eine CD/DVD eingelegt ist. Ist dies nicht der Fall, dann ist die Datei %tmpdvdlog% leer und es wird nix gesetzt, was so nicht beabsichtigt war... schließlich brauche ich ja einen Pfad...
Schön wäre jetzt, wenn ich einfach Folgendes in der For-Schleife machen könnte:
for /F %%i in (%tmpdvdlog%) do (
if %%i =="" (
set sourcepath=\\netzwerkpfad\name
) else (
set sourcepath=%%i
)
)
Und genau das funktioniert nicht... es wird nix gesetzt, ein echo %sourcepath% bringt nur die Meldung, dass echo off ist...
Es ist irgendetwas mit dem IF, aber ich komme nicht 'drauf. Ich denke es ist eine Kleinigkeit, aber diese hält mich etwas auf... (vielleicht ist es auch einfach zu spät?)
Gute Nacht
Axel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 68552
Url: https://administrator.de/contentid/68552
Ausgedruckt am: 25.11.2024 um 04:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo ahe!
Unter der Annahme, dass eine leere Datei eine Länge von 0 Byte hat, könnte als Workaround ja vielleicht (ungetestet)
klappen ...
... oder auch (genauso ungetestet, würde mir aber besser gefallen):
Grüße
bastla
Unter der Annahme, dass eine leere Datei eine Länge von 0 Byte hat, könnte als Workaround ja vielleicht (ungetestet)
for %%i in (%tmpdvdlog%) do if %%~zi equ 0 (
set sourcepath=\\netzwerkpfad\name
) else (
set sourcepath=%%i
)
... oder auch (genauso ungetestet, würde mir aber besser gefallen):
set sourcepath=
for /f %%i in ('cscript //nologo %~dp0\GetCDDriveLetter.vbs') do set sourcepath=%%i
if not defined sourcepath set "sourcepath=\\netzwerkpfad\name"
Grüße
bastla
Hallo,
ob ein drive exists oder isredy ist in vbs zweierlei.
Erläuterungen von MS dazu:
Bei Laufwerken mit austauschbaren Datenträgern gibt die DriveExists-Methode true zurück, auch wenn kein Datenträger eingelegt ist. Verwenden Sie die IsReady-Eigenschaft des Drive-Objekts, um festzustellen, ob das Laufwerk bereit ist.
Soll heißen, Der LW-Buchstabe ist ja vom System vergeben; nur ansprechen kannst Du das Laufwerk nicht, da es ohne Cd oder DVD nicht nicht aktiv ist.
Man sollte nicht alles so kompliziert machen, Möglichkeiten:
1. im VBScript Abfrage nach IsReady und wenn nein Aufforderung entsprechende CD/DVD einlegen und das alles in einer Schleife.
2. nach "for /F %%i in (%tmpdvdlog%) do (set sourcepath=%%i)"
Abfrage
if not %sourcepath" = "" goto weiter
echo keine CD/DVD im Laufwerk, Daten hier eingeben!!
set /p sourcepath=eingabe:
:weiter
... entsprechende Befehle
MfG maneich
ob ein drive exists oder isredy ist in vbs zweierlei.
Erläuterungen von MS dazu:
Bei Laufwerken mit austauschbaren Datenträgern gibt die DriveExists-Methode true zurück, auch wenn kein Datenträger eingelegt ist. Verwenden Sie die IsReady-Eigenschaft des Drive-Objekts, um festzustellen, ob das Laufwerk bereit ist.
Soll heißen, Der LW-Buchstabe ist ja vom System vergeben; nur ansprechen kannst Du das Laufwerk nicht, da es ohne Cd oder DVD nicht nicht aktiv ist.
Man sollte nicht alles so kompliziert machen, Möglichkeiten:
1. im VBScript Abfrage nach IsReady und wenn nein Aufforderung entsprechende CD/DVD einlegen und das alles in einer Schleife.
2. nach "for /F %%i in (%tmpdvdlog%) do (set sourcepath=%%i)"
Abfrage
if not %sourcepath" = "" goto weiter
echo keine CD/DVD im Laufwerk, Daten hier eingeben!!
set /p sourcepath=eingabe:
:weiter
... entsprechende Befehle
MfG maneich
Moin ahe,
ein etwas später Nachtrag, aber der Vollständigkeit halber:
Habe es gerade per Zufall gesehen: hier im Forum sind auch schon ähnliche Lösungen gepostet...
RE #8: Installationspfad einer Anwendung suchen auf unbekanntem PC
Danke Dir fürs Veröffentlichen Deiner Lösung!.
Grüße
Biber
ein etwas später Nachtrag, aber der Vollständigkeit halber:
Habe es gerade per Zufall gesehen: hier im Forum sind auch schon ähnliche Lösungen gepostet...
RE #8: Installationspfad einer Anwendung suchen auf unbekanntem PC
Danke Dir fürs Veröffentlichen Deiner Lösung!.
Grüße
Biber