Tricks mit USB-Stick, Batch und weiteres?

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Auch noch meinen Senf in die Runde.

  1. Klar... aus einem Programm/Script kann ein anderes Aufgerufen werden
  2. Ja...am besten geht es mit Powerschell:

Demo.ps1

$(New-Object -comObject Shell.Application).Namespace(17).ParseName("J:").InvokeVerb("Eject")

..als Powershell-Inliner in einer Batch.

@echo off
chcp 65001 >nul


set "DriveToEject=j:"
  rem ermittle den Type des Laufwerks  %DriveToEject%
for /f "usebackq skip=2 tokens=2-4 delims=," %%a in (`"wmic volume where DriveLetter='%DriveToEject%' get DriveLetter,DriveType,SystemVolume /format:csv 2>nul"`) do (
      rem driveTypes  CDRom=5 , Festplatter=3 , USB-Stick=2
    set "DriveToEject.Type=%%b"
)
if "%DriveToEject.Type%" neq "2" (
    echo %DriveToEject% ist kein USB-Stick.
    echo ...tue nichts!
    timeout 10
    exit /b
)


:loop
powershell -c "&{$(New-Object -comObject Shell.Application).Namespace(17).ParseName('%DriveToEject%').InvokeVerb('Eject');}"


  rem teste Zugriff auf Laufwerk
dir %DriveToEject% >nul 2>&1 && (
    echo %DriveToEject% kann nicht ausgeworfen werden
    echo möglicherweise  wird noch  darauf zugegriffen
    echo schliesse bitte alle Anwendungen, welche auf %DriveToEject% zugreifen...
      rem versuche es  in 5 sekunden erneut
    timeout 5 >nul
    goto :loop
) || (
    echo %DriveToEject%  ausgeworfen 
)
pause

3.Es gibt keinem effektiven Schutz vor Löschen Überschreiben Formatieren... (bestenfalls Schreibschutz für Dateien setzen!)

4.Variablen lassen sich recht leicht selbst Definieren die Parametervariable %0 zeigt immer auf die ausgeführte Batch!

demo.cmd

@echo off
chcp 65001 >nul

  rem  wie eine Batch sich selbst erkennt:
set "thisBatch=%~f0"
set "thisBatch.Name=%~nx0"
set "thisBatch.Drive=%~d0"
set "thisBatch.Path=%~dp0"

  rem ermitle den Type des Laufwerks von dem die Batch gestartet wurde: 
for /f "usebackq skip=2 tokens=2-4 delims=," %%a in (`"wmic volume where DriveLetter='%thisBatch.Drive%' get DriveLetter,DriveType,SystemVolume /format:csv 2>nul"`) do (
      rem driveTypes  CDRom=5 , Festplatter=3 , USB-Stick=2
    set "thisBatch.Drive.Type=%%b"
)
echo:
  rem  Variablen Anzeigen
set thisBatch
  rem läuft die Batch auf einem USB-Stick?
  rem wenn  nicht...
if "%thisBatch.Drive.Type%" neq "2" (
    echo Diese Batch: "%thisBatch.Name%"  läuft aktuell nicht von einem  USB-Stick.
    echo ...tue nichts!
    timeout 10
    exit /b
)
  rem hier was passiert, wenn auf einem USB...
echo  "%thisBatch.Name%" wurde  von einem USB-Stick gestartet
pause

https://ss64.com/nt/syntax-args.html

laufwerksinformationen:

wmic volume get /value
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Mausennahoj 
Beitragsersteller
 08.03.2020, 09:40

Kann man vielleicht auch machen, dass die Batch den Computer erkennt? also z.B. bei dem computernamen von meinem pc funktioniert und bei anderen sofort den befehl sendet den usb stick auszuwerfen?

0
Mausennahoj 
Beitragsersteller
 08.03.2020, 09:49
@Mausennahoj

oder... ich hab eine eigene idee: ich versuch einfach auf den einen bestimmten benutzer zuzugreifen und wenn dass geht passiert das und wenn nicht dann das Auswerfen des usb. Also Code ca. so: Wie du selbst gesagt hast verschiedene Wege führen zum Ziel :D

@echo off
cd C:
cd Users\{mein Benutzername}
if errorlvl 1 goto Auswurf
{Script}

Auswurf:
{Script zum Auswerfen des Usb}
0
Erzesel  08.03.2020, 23:21
@Mausennahoj
@echo off
echo  %ComputerName%  ; %UserName% ;
pause

https://ss64.com/nt/syntax-variables.html

Du kannst nicht das Laufwerk ausführen wenn sich die ausgeführte Batch auf diesem befindet.

%DriveToEject% kann nicht ausgeworfen werden ... möglicherweise  wird noch  darauf zugegriffen ... schliesse bitte alle Anwendungen, welche auf %DriveToEject% zugreifen...

...in diesem Fall wäre das cmd auf die Batch....

0

!) JA wenn der ausfruf dieses Programnm Bestandteil des aufgerufenen Programms ist oder innerhalb eines Batchs aufgerufen wird.

2) kann es nicht geben, weil usb nicht über einen auswurfmechanismus verfügt.

3) Nein denn der Usb-Stick verfügt über keinen Schutzmechanismus wie z.B: eine Diskette.

4) sind mir keine bekannt. der usb-stick tritt ja als laufwerk auf, nicht als usb