Tricks mit USB-Stick, Batch und weiteres?
Ich hätte mal ein paar Sachen die ich gerne wissen würde:
1) kann man machen dass wenn jemand ein programm/datei auf dem usb stick öffnet, dass dann automatisch ein anderes geöffnet wird?
2) Gibt es einen cmd Befehl der den usb stick auswirft?
3) wie mache ich einen usb stick/kann ich einen usb stick machen bei dem nicht so einfach auf fremden pcs dateien gelöscht / der usb stick formatiert werden kann?
4) Gibt es ein Kürzel dass den jetzigen Ort (also wenn ich auf dem usb stick eine batch öffne um was vom pc auf den stick zu kopieren) enthält. es gibt ja kürzel wie %Userprofile% oder %temp% gibt es da auch so etwas wie %usb% oder %here%?
So das waren sehr viele Fragen in einer. Ich hätte eigentlich 4 seperate Fragen stellen können, aber jetzt hat es sich so ergeben... Auf jeden Fall danke schonmal für hilfreiche Antworten und Entschuldigung für meine Groß-und Kleinschreibung und für meine Zeichensetzung.
3 Antworten
Auch noch meinen Senf in die Runde.
- Klar... aus einem Programm/Script kann ein anderes Aufgerufen werden
- 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
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}
@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....
!) 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
1.) Klar kann man Programme oder Scripte schreiben die etwas anderes öffnen.
2.) https://superuser.com/questions/704870/mount-and-dismount-hard-drive-through-a-script-software
3.) Nein.
4.) Brauchst du nicht. Deine Working Directoy ist dich schon der USB Stick wenn du ein Script auf dem USB Stick öffnest..
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?