leopold.bloom
Goto Top

Mehrere CMD Instanzen aus einer Batch aufrufen - virtuelle Laufwerke mappen

Hallo liebe Leute,

Verzweiflung macht sich breit - ich verstehe mal wieder etwas nicht. Hinweise und Tips sind sehr erwünscht.

Die Aufgabe meines Batches: Ich habe 4 Cloud Speicher, denen ich zum Systemstart automatisch Laufwerksbuchstaben gebe und die ich so als "normale" LW im Explorer ansprechen kann. Auf jedem dieser 4 Speicher habe ich einen gecrypteten Ordner. Um die gecrypteten Ordner in Klarschrift zu sehen bzw. um etwas verschlüsselt in der Cloud ablegen zu können, muss ich für jeden dieser gecrypteten Ordner einen virtuellen Laufwerksbuchstaben mappen. Ausserdem muss sicher gestellt sein, dass zum Zeitpunkt, wenn die Crypt LW gemappt werden sollen, die Cloud Laufwerke bereits vorhanden sind. Das will ich nicht alles von Hand machen. 4 Clouds mit je einem Crypt Verzeichnis. das sind 8 Buchstaben, die da zu vergeben sind. Daher der Batch. Er funktioniert bereits - aber eine Stelle hätte ich gerne "etwas eleganter". Bzw. ich muss aus dem Batch einen weiteren Batch aufrufen. Auf der Kommandozeile funktioniert es auch ohne diesen zweiten Batch. Nur im Batch nicht. Mir ist nicht klar warum das so ist.

Ach ja - WinXP SP3.

@ECHO OFF

Rem Laufwerksbuchstaben für die Clouds

set Cloud1=j 
set Cloud2=k
set Cloud3=l
set Cloud4=m

Rem Laufwerksbuchstaben für die Crypts

set Crypt1=o
set Crypt2=p
set Crypt3=q
set Crypt4=r

Rem Cloud1 bekommt den LW Buchstaben j
Rem Das verschlüsselte Verzeichnis auf j bekommt den LW Buchstaben o
Rem Cloud2 bekommt den LW Buchstaben k
Rem Das verschlüsselte Verzeichnis auf k bekommt den LW Buchstaben p usw.

Rem encfs.exe ist das Verschlüsselungsprogramm
Rem und es erzeugt die Laufwerksbuchstaben
Rem für die verschlüsselten Laufwerke

set Encfs_Pfad=c:\encfs.exe

Rem die gecrypteten LW lassen sich nur mit dem PW mounten.
Rem j:\crypt_verz_cloud_1 ist das RootVerz für LW o:
Rem k:\crypt_verz_cloud_2 ist das RootVerz für LW p: usw.

set Crypt1_Pfad=j:\crypt_verz_cloud_1
set Crypt1_PW=crypt1_pw
set Crypt2_Pfad=k:\crypt_verz_cloud_2
set Crypt2_PW=crypt2_pw
set Crypt3_Pfad=l:\crypt_verz_cloud_3
set Crypt3_PW=crypt3_pw
set Crypt4_Pfad=m:\crypt_verz_cloud_4
set Crypt4_PW=crypt4_pw

Rem Netdrive.exe mappt die Clouds als Laufwerke und ordnet LW Buchstaben zu

start c:\programme\NetDrive\netdrive.exe -tray

Rem Etwas Geduld
@ping -n 15 localhost> nul

for %%i in (%Cloud1% %Cloud2% %Cloud3% %Cloud4%) do (

Rem Wenn der Laufwerksbuchstabe für die Cloud vergeben worden ist
Rem den Laufwerksbuchstaben für das gecryptete Verzeichnis erzeugen
Rem das geht über die ausgelagerte Batch mount_all.cmd.
Rem nowindow.exe sorgt dafür, dass sich kein weiteres Cmd Fenster öffnet

		  @if exist %%i:\ (
		  if %%i == %Cloud1%  if not exist %Crypt1%:\  start nowindow.exe mount_all.cmd %Crypt1_PW% %Encfs_Pfad% %Crypt1_Pfad% %Crypt1%:
		  if %%i == %Cloud2%  if not exist %Crypt2%:\  start nowindow.exe mount_all.cmd %Crypt2_PW% %Encfs_Pfad% %Crypt2_Pfad% %Crypt2%:
		  if %%i == %Cloud3%  if not exist %Crypt3%:\  start nowindow.exe mount_all.cmd %Crypt3_PW% %Encfs_Pfad% %Crypt3_Pfad% %Crypt3%:
		  if %%i == %Cloud4%  if not exist %Crypt4%:\  start nowindow.exe mount_all.cmd %Crypt4_PW% %Encfs_Pfad% %Crypt4_Pfad% %Crypt4%:
		  )

EXIT


So funktioniert es. Pro Crypt LW ist im Hintergrund eine Instanz von CMD offen. Also 4 Instanzen von CMD.

in der mount_all.cmd steht nur dies

@set Passwort=%1
@set Encfs_pfad=%2 
@set Crypt_pfad=%3
@set Crypt_LW=%4 

echo %Passwort%|%Encfs_pfad%%Crypt_pfad% %Crypt_LW% -S 

Es ist praktisch nur eine Zeile und ich würde sie gerne mit in den Hauptbatch integrieren. Ich habe den ganzen Tag daran herumprobiert.
Dies hier funktioniert nur für eine Cloud. Manchmal auch für gar keine.

for %%i in (%Cloud1% %Cloud2% %Cloud3% %Cloud4%) do (

		  @if exist %%i:\ (
                  
		  if %%i == %Cloud1%  if not exist %Crypt1%:\  start nowindow.exe cmd.exe /k echo %Crypt1_PW%|%Encfs_Pfad% %Crypt1_Pfad% %Crypt1%: -S
		  if %%i == %Cloud2%  if not exist %Crypt2%:\  start nowindow.exe cmd.exe /k echo %Crypt2_PW%|%Encfs_Pfad% %Crypt2_Pfad% %Crypt2%: -S
		  if %%i == %Cloud3%  if not exist %Crypt3%:\  start nowindow.exe cmd.exe /k echo %Crypt3_PW%|%Encfs_Pfad% %Crypt3_Pfad% %Crypt3%: -S
		  if %%i == %Cloud4%  if not exist %Crypt4%:\  start nowindow.exe cmd.exe /k echo %Crypt4_PW%|%Encfs_Pfad% %Crypt4_Pfad% %Crypt4%: -S
		  )

Einzeln aufgerufen auf der Kommandozeile funktioniert es mit "cmd.exe /k echo %Crypt[Nr]_PW%|%Encfs_Pfad% %Crypt[Nr]_Pfad% %Crypt[Nr]%: -S".Es soll das gleiche machen, wie mount_all.cmd. Aber im Hauptbatch mappt dieser Code das erste gecryptete LW und dann bleibt der Batch stehen. Die drei anderen gecrypteten LW werden nicht mehr gemappt. Manchmal wird auch gar kein Crypt LW gemappt. Es liegt nicht an nowindow.exe. Ohne nowindow.exe habe ich das gleiche Ergebnis. Bei direktem Aufruf von 4 CMD Instanzen aus dem Batch funktioniert es nicht. Mache ich das Gleiche über die mount_all.cmd funktioniert es ohne Problem. Hat jemand dafür eine Erklärung? Oder noch besser - eine Lösung?

LG aus HH

Leopold

Content-ID: 189827

Url: https://administrator.de/contentid/189827

Ausgedruckt am: 05.11.2024 um 15:11 Uhr

Leopold.Bloom
Leopold.Bloom 25.08.2012 um 14:21:06 Uhr
Goto Top
Heureka. Ich habe die Lösung gefunden.

start nowindow.exe cmd.exe "/k echo %Crypt3_PW%|%Encfs_Pfad% %Crypt3_Pfad% %Crypt3%: -S"   

Diese eine Zeile hat mich mehr Zeit gekostet, als ich jemals damit sparen kann.

LG aus HH

Leopold