13268
Goto Top

Diverse Dateien umlenken

Hallo,

ich bin gerade dabei ein kleines Skript zu schreiben und habe da ein "kleines" Problem.

Also in dem Skript sollen die Dateien explorer.exe und user32.dll von der Festplatte auf ein RAM-Drive kopiert werden.
Soweit kein Problem.

Aber jetzt möchte ich dem BS klarmachen wenn es einen Aufruf für eben diese Dateien bekommt, das er die Datein aus dem RAM-Drive verwendet und nicht die von der Festplatte.

Jetzt werdet Ihr euch sicher fragen wofür der Schmarn, es geht darum das ich ein Windows PE mir gerade bastle das komplett von der CD startet und um den Zugriff etwas zu beschleunigen möchte ich eben diese Dateien aufs RAM-Drive legen.

Ich weiß auch das es da eine Möglichkeit gibt, nur weiß ich nicht mehr wie.

Danke im voraus.
Chris

Content-Key: 11024

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

Printed on: April 23, 2024 at 06:04 o'clock

Mitglied: 10545
10545 May 24, 2005 at 06:27:06 (UTC)
Goto Top
Hallo Christian,

ich bin mir jetzt nicht ganz sicher, aber versuche es mal unter "Systemeigenschaften/Erweitert/Umgebungsvariablen..."

Möglicherweise kannst Du es hier setzen.

Gruß, Rene
Mitglied: 13268
13268 May 24, 2005 at 07:07:35 (UTC)
Goto Top
Hallo,

danke für den Tip, aber über die Umgebungsvariablen kann ich nur den den Kompletten Ordner umlenken aber keine einzelnen Dateien.
Und ich muss es über eine Batch erledigen, also mit set usw.

Chris
Member: Biber
Biber May 24, 2005 at 10:24:37 (UTC)
Goto Top
Hallo Chris,
mein Lösungsvorschlag ist folgender:

- die gewünschten Dateien auf Ramdisk kopieren
- den Suchpfad, d.h. %Path% und Systemumgebung so ändern, dass Ramdisk als erstes gelesen wird.
- und das Ganze in einer wartbaren Autostart-*.bat-Datei mit zwei tools aus dem Microsoft-Resource-Kit
- oder eben ohne die beiden Tools
(dann ist manuelles Ändern der Umgebungsvariablen nötig, wie von Rene angeregt)


aber liebsten wie folgt
du brauchst setx.exe und pathman.exe aus dem RK-Kit!


:: 1. Batchdatei im Autostartorder anlegen oder eine bestehende erweitern

in der "xyz.bat":

:: 2 büschen lesbar und wartbar machen
:: neue Variable %Ramdisk% definieren... Inhalt Laufwerk der Ramdisk
:: neue Variable %OldPath% definieren... Inhalt der bisherige %PATH%
:: neue Variable %FileList% definieren...Inhalt alle Dateien, die auf %Ramdisk% sollen
:: Bedingung: alle dateien in %FileList% werden bisher im %PATH% gefunden.
set Ramdisk=R:\
set oldpath=%PATH%
set FileList=explorer.exe user32.dll beispiel3.exe weissderGilb.com setx.exe pathman.exe usw.com
:: 3. Dateien kopieren
for %%J in (user32.dll setx.exe pathman.exe) do copy %%~sf$Path:J %Ramdisk%
:: nicht verstehen wollen, den FOR-Befehl... einfach machen *gg
::
:: 4 prüfen, ob %Ramdisk schon im %PATH% an erster Stelle steht
If (%path:~0,3%)==(%Ramdisk%) goto :eof
:: sonst machen wir das halt einmalig...
:: 5. Für künftige DOS-Aufrufe den Path dauerhaft machen
setx PATH %Ramdisk%;%OldPath%
:: 6. Für die doofen Windowsprogramme die Umgebungsvariabe "Systempfad" einmal löschen
:: ... und fairerweise wieder neu aufbauen
pathman /rs %OldPath%
pathman /as %Ramdisk%;%OldPath%
:: ich sag es ungern, aber dazu braucht der User die entsprechenden Rechte..
:: wenn der User "nur" den UserPath ändern kann und nicht den SystemPath, dann streich Schritt 5 + 6
:: und mach das in einer Batchdatei unter deinem Namen (RUNAS Admin)
:: ODER wie von Rene vorgeschlagen manuell (Ändern der Umgebungsvariablen einmalig)
:: Schritt 5 und 6 sind ja nur einmal im leben nötig
:: ------------fertich iss


Hope it helps

Frank / der Biber aus Bremen
Member: Biber
Biber May 24, 2005 at 11:15:52 (UTC)
Goto Top
die Zeile

for %%J in (user32.dll setx.exe pathman.exe) do copy %%~sf$Path:J %Ramdisk%

sollte natülich

for %%J in ( %FileList%) do copy %%~sf$Path:J %Ramdisk%

heißen.

Ich hoffe, dass nicht zu viele andere Tippfehler drin sind.

Biber
Mitglied: 13268
13268 May 24, 2005 at 14:34:19 (UTC)
Goto Top
Hallo Biber,

danke für das Skript, hat aber leider nicht geklappt.
Nach dem Kopieren der Dateien kommt eine Syntaxfehlermedlung und er macht mit der IF Anweisung weiter.
Die Path Variable bleibt unberührt, sprich es wird keine Änderung gemacht.

Gruss
Christian
Member: Biber
Biber May 24, 2005 at 17:39:46 (UTC)
Goto Top
Tja, Chris,

So ist das immer mit meiner Software..die reift beim Kunden *feix

Hhhhmmm ...

...das Kopieren der Dateien macht er noch oder macht er nicht??
Hab ich nicht ganz verstanden...

Oder verreckt er erst in der "IF ... goto :eof "- Zeile???

Bitte poste doch noch mal zurück mit Deiner angepassten Autostart-Batdatei, denn:

- entweder ist in der %Filelist% eine Datei dabei, die in Anführungszeichen gehört
- oder im %Path% ist ein Verzeichnisname, der in ...(s.o)
- oder die Ramdisk heißt nicht R:\ bei Dir (*lach, kleiner Scherz)

Dass der %path% unverändert ist (wenn Du nach wie vor im selben DOS-Fenster bist),
... ja, stimmt & sollte so ...
denn diese %Path%-Anpassung hab ich mir bewusst geschenkt..
die wäre meiner Meinung ohnehin wieder vergessen, wenn die Autostart-Batdatei abgearbeitet ist.
Ebenso wie die drei neu definierten variablen %Filelist%, %Oldpath% etc auch nicht dauerhaft gespeichert werden, also beim nächsten Aufmachen eines DOS-Fensters weg sind.

Aber als Trockenübung kannst Du sowohl am Dos-Prompt wie auch in der obigen *-Bat-Datei einfügen/eingeben "set path=%ramdisk%;%path%" bzw. wie oben:

::face-sad zum Testen am Prompt:
set Oldpath=%path%
set ramdisk=R:\
::face-sadoder wie die nun heißen mag)

set path=%ramdisk%;%oldpath%

und dann schau mal, was ein echo bringt..

echo %path% sollte nun "R:\;C\windows...."...und weitere 3 Meter Text bringen
echo (%path:~0,3%)................sollte "(R:\)" ...bringen


Würde mich zutiefst deprimieren, wenn wir beide nicht mal son Mini-Batchkrams zum fliegen brächten.

Also, lass uns mal die Kuh vom Eis holen


Frank /der Biber aus Bremen
Mitglied: 13268
13268 May 25, 2005 at 06:33:24 (UTC)
Goto Top
Hallo Frank,

also hier erstmal die angepasste Batch

set Ramdisk=B:\
set oldpath=%PATH%
set FileList=explorer.exe user32.dll setx.exe pathman.exe
for %%J in ( %FileList%) do copy %%~sf$Path:J %Ramdisk%
If (%path:~0,3%)==(%Ramdisk%) goto :eof
setx PATH %Ramdisk%;%OldPath%
pathman /rs %OldPath%
pathman /as %Ramdisk%;%OldPath%

Der Fehler tritt direkt nach dem kopieren auf.

x:\i386\system32>copy X:\i386\system32\pathman.exe b:\
1 file(s) copied
The syntax of the command is incorrect.

Danach macht er mit if ----> (b:\)==(B:\ ) goto :eof <--- weiter.
Und beendet die Batch.

Die Trockenübung hat einwandfrei funktioniert.

Gruss
Chris
Member: Biber
Biber May 25, 2005 at 08:53:00 (UTC)
Goto Top
*Kopfkratz

Moin Chris,

Nun kommt wieder der Satz, bei dem mich meine Kunden auch immer lächelnd zur Tür bringen: "Bei mir läuft es aber..."

Wer bringt denn diese ausländische Fehlermeldung ("The syntax...") ?
Ist das der CMD-Interpreter oder hast Du eine andere SetX.Exe als ich und die sacht sowas?

*grummel*

Lass uns das mal direkt klären und danach hier posten...

Frank / Biber3_AT_hotmail.de
Mitglied: 13268
13268 May 25, 2005 at 09:18:19 (UTC)
Goto Top
Hallo,

also es ist eine Windows PE basierend auf Windows XP (SP2) Prof. in englisch und auch das Resource-Kit ist in englisch.
Die Versionen :

CMD - Microsoft windows XP [Version 5.1.2600]
setx - Version 1.0a (5/31/96)
Über pathman habe ich keine Versions info finden können.

Chris
Member: Biber
Biber May 25, 2005 at 09:23:46 (UTC)
Goto Top
okay, Chris...

ich war der Dussel.. *feixxx

also, was schiefgehen kann, passiert bei Setx bzw pathman:

Nimm bitte mal Anfü-Zeichen dort:

setx PATH "%Ramdisk%;%OldPath%"
pathman /rs "%OldPath%"
pathman /as "%Ramdisk%;%OldPath%"


Das sollte das aber reichen. *auf Holz klopft

Frank / der Biber aus Bremen