yakazaa
Goto Top

BATCH Dateinamen auslesen und als Parameter übergeben

Hallo zusammen, bräuchte da ganz dirngen Hilfe bei einer Sache, die eigentlich eine Lapalie ist, aber eben nur eigentlich !
Aber ich fange mal vorne an:

Unsere Firma brennt für unsere Kunden Image CDs die letztendlcih auf einem DOS Skript basieren.

Jetzt hat unser Kunde mehrere Stationen und Pro Station eine Image CD.
Diese Image CDs beinhalten eine AUTOEXEC.BAT, welche wiederum eine RESTORE.BAT mit einem entsprechendem Parameter aufruft.
Der Parameter ist der Stationssname z.B.: RECHNER-1
Die RESTORE.BAT startet dann eine Recovery der Datei RECHNER-1.PQI wobei RECHNER-1 halt der übergebene Parameter ist.

Jetzt muss also für jede Station diese Autoexec.bat angepqasst werden und ich soll für einen Kunden mit 40 Pcs besagte Images brennen - Ihr könnt euch vorstellen das ich jetzt keine Lust hab, immer und immer wieder diese Date zu ändern, einen neuen Bootbereich zu basteln und so weiter.

Meine Frage konkret: Kann man nicht die CD nach PQI Files durchsuchen lassen (ist ja immer nur eins drauf) und dann den Namen so verändern, dass letztendlich statt RECHNER-1.PQI dann nurnoch RECHNER-1 in der zu übergebenen Variable steht ?!

Aus einem anderen Beitrag hier im forum hab ich mir schonmal sowas hier zurechtgebastelt, aber so ganz ist das glaub ich nicht das richtige, oder ?!

AUTOEXEC.BAT sieht so aus:
@ECHO OFF
rem Datei: AUTOEXEC.BAT (PC Konfiguration)
rem Stand: 14:16 14.01.1999

CLS
VER /R
PROMPT $P$G
VERIFY ON
PATH A:\
keyb gr
MSCDEX.EXE    /L:Z     /D:ONIDE001
CLS

for /F %%i in ('dir /b /A:-d /o:d "*.PQI"') do Set Rechnername=%%i  
RESTORE %Rechnername%
REM Ursprünglich nur RESTORE RECHNER-01 (ohne.PQI)

RESTORE.BAT sieht so aus:

@ECHO OFF
z:\
PQER /IFC /WFS /CMD=A:\Restore.SCR /IMG=z:\%Rechnername%

REM Ursprünglich PQER /IFC /WFS /CMD=A:\Restore.SCR /IMG=z:\%%i.PQI
Leider wird mir immer ein Syntaxfehler ausgegeben.

Ich hoffe Ihr könnt mir helfen !!

Schonmal ein dickes Danke im Voraus !!!

Content-ID: 86309

Url: https://administrator.de/forum/batch-dateinamen-auslesen-und-als-parameter-uebergeben-86309.html

Ausgedruckt am: 21.12.2024 um 15:12 Uhr

bastla
bastla 24.04.2008 um 14:42:03 Uhr
Goto Top
Hallo yakazaa!

Versuche es so:
for /f %%i in ('dir /b /s /a-d "*.PQI"') do set "Rechnername=%%~ni"  

Grüße
bastla
yakazaa
yakazaa 24.04.2008 um 14:45:00 Uhr
Goto Top
Hi,
brenne gerade eine neue CD.
Was macht denn dieses ~ni genau ?!
Im Prinzip hab ichja schon RECHNER-1.PQI in der Variablen %%i stehen gehabt.

Jetzt muss ich ja nur noch die letzten 4 Zeichn killen und fertig ist meine Variable.
bastla
bastla 24.04.2008 um 14:51:17 Uhr
Goto Top
Hallo yakazaa!

Das "%%~ni" soll nur den Dateinamen auslesen, setzt allerdings die Verwendung von "cmd.exe" voraus, während bei Dir ja vermutlich "command.com" verwendet wird - daher vermutlich nicht anwendbar.

Wozu benötigst Du eigentlich den Namen? Soll in der RESTORE.BAT nicht ohnehin "Z:\Name.PQI" stehen?

Noch zur Sicherheit: Die .PQI-Datei steht im Root-Verzeichnis?

Grüße
bastla

[Edit] Nachtrag: Falls der Dateiname keinen weiteren "." enthält:
for /f %%i in ('dir /b /a-d "\*.PQI"') do for /f "delims=." %%n in ("%%i") do set "Rechnername=%%n"  
[/Edit]
yakazaa
yakazaa 24.04.2008 um 14:58:39 Uhr
Goto Top
Hallo bastla !

Du hast Recht, es wird die Command.com verwendet und die PQI Datei ist im Root Verzeichnis.

Ich glaube der Parameter wird noch an anderer Stelle verwendet, denn wenn cih das Gesamte Dingen ausführe, kommt für den Bruchteil einer Sekunde eine Fehlermeldung in der irgendwas mit Paramter steht. Zum kompletten lesen der Fehlermeldung reicht es aber leider nicht, denn Power Quest startet trotzdem erstmal, bricht dann aber mit einer Fehlermeldung ab.

Ich werd dans Ganze mal in einer VM Ware versuchen und dann den Vorgang aufnehmen.
Dann sollte ich ja eiegntlich in dem Video die Fehlermledung länger sehen können.
Umständlich - aber so sollte es klappen face-wink

Eine Möglichkeit die letzten 4 Zeichen einfach wegzuschmeißen gibt es nicht, oder ?!

Edit: Die Fehlermeldung lautet:
Sytaxfehler
Erforderlicher Parameter fehlt
bastla
bastla 24.04.2008 um 15:02:59 Uhr
Goto Top
Hallo yakazaa!

Damit Du die Fehlermeldung besser nachvollziehen kannst, solltest Du (zum Testen) das "ECHO OFF" weglassen und am Ende (oder auch zwischendurch) einen "PAUSE"-Befehl einfügen.

Eine Möglichkeit die letzten 4 Zeichen einfach wegzuschmeißen gibt es nicht, oder ?!
siehe Nachtrag oben

Grüße
bastla
yakazaa
yakazaa 24.04.2008 um 15:10:47 Uhr
Goto Top
Habe das Ganze mal kurz simuliert um zu sehen was jetzt übergeben wird und bekomme folgende Fehlermeldung.

C:\Documents and Settings\dedtu\Desktop>for /F %i in ('dir /b /a-d "\*.PQI"') do
for /F "delims=." %n in ("%i") do set "Rechnername=%n"
File Not Found

Habe auf dem Desktop eine SAMPLE.PQI erstellt.

Quellcode Test.BAT:
for /f %%i in ('dir /b /a-d "\*.PQI"') do for /f "delims=." %%n in ("%%i") do set "Rechnername=%%n"  
RESTORE %Rechnername%

Quellcode RESTORE.BAT
echo %Rechnername%
pause
yakazaa
yakazaa 24.04.2008 um 15:13:37 Uhr
Goto Top
Ich poste jetzt nochmal die Version wie es ursprünglich war, evtl. gibt es ja bei mir einen Denkfehler...

Quellcode AUTOEXEC.BAT:
@ECHO OFF
rem Datei: AUTOEXEC.BAT (PC Konfiguration)
rem Stand: 14:16 14.01.1999

CLS
VER /R
PROMPT $P$G
VERIFY ON
PATH A:\
keyb gr
MSCDEX.EXE    /L:Z     /D:ONIDE001
CLS

RESTORE SVS-1

Quellcode RESTORE.BAT:
@ECHO OFF
z:\
PQER /IFC /WFS /CMD=A:\Restore.SCR /IMG=z:\%1.PQI
yakazaa
yakazaa 24.04.2008 um 15:17:53 Uhr
Goto Top
Ok, hab den Fehler gefunden:

Der / vor dem *.PQI muss weg..

Ziehe gerade nen Image und teste dann in einer VM Ware... Meld mich wieder...
yakazaa
yakazaa 24.04.2008 um 15:29:48 Uhr
Goto Top
Hm, leider bleibt der Fehler..

Noch ne Idee woran es liegen könnte ?!
bastla
bastla 24.04.2008 um 15:38:28 Uhr
Goto Top
Hallo yakazaa!

Habe auf dem Desktop eine SAMPLE.PQI erstellt.
Gesucht wird in Root (wegen des "\" vor "*.PQI") ...

Grüße
bastla
yakazaa
yakazaa 24.04.2008 um 15:40:01 Uhr
Goto Top
Ja aber hab das Skript doch auch aufm Desktop liegen gehabt...
Biber
Biber 24.04.2008 um 15:56:47 Uhr
Goto Top
Moin yakazaa,

nicht hektisch werden...
('dir /b /a-d "\*.PQI"') ---> sucht in "Root", aber Du stehst in "\...bla...\..\desktop"
('dir /b /a-d ".\*.PQI"') --> würde in "...\Desktop" suchen, wenn Du in "..\Desktop" stehst
('dir /b /s /a-d "\*.PQI"') ---> würde AB "Root" alle SubDirs des Laufwerks scannen , egal wo Du stehst

Variante 1 ist für Deinen Zweck die ungünstigste.

Grüße
Biber
yakazaa
yakazaa 24.04.2008 um 16:03:57 Uhr
Goto Top
face-big-smile
Ok ok, dann weiss ich schonmal was ich nicht verwenden sollte face-wink

Hab eigentlich eine DVD auf der das besagte Image ist, nenen wir es RECHNER-01.PQI
Im Laufe des Bootvorgangs von dieser DVD wird das Laufwerk auf Z: gemappt.
Unter A: befinden sich RESTORE.BAT sowie AUTOEXEC.BAT und andere, zum Boot notwendige Dateien.

Das Ganze basiert "irgendwie" auf Wndows 95, so steht es zumindest während des Bootvorgangs da....

Wenn er dann zu der Position kommt, andem er

PQER /IFC /WFS /CMD=A:\RESTORE.SCR /IMG=Z:\%RECHNER%.PQI

aufruft, läuft er in den oben beschriebenen Syntaxfehler.

Das mit dem File not found hab ich jetzt verstanden.
yakazaa
yakazaa 24.04.2008 um 16:07:27 Uhr
Goto Top
Habe mir jetzt überlegt die beiden Dateien zusammen zu legen.

Komme dann auf folgende AUTOEXEC.BAT:
@ECHO ON
rem Datei: AUTOEXEC.BAT (PC Konfiguration)
rem Stand: 14:16 14.01.1999

REM CLS
VER /R
PROMPT $P$G
VERIFY ON
PATH A:\
keyb gr
MSCDEX.EXE    /L:Z     /D:ONIDE001
REM CLS

for /f %%i in ('dir /b /a-d "*.PQI"') do for /f "delims=." %%n in ("%%i") do set "RECHNER=%%n"  
z:
PQER /IFC /WFS /CMD=A:\RESTORE.SCR /IMG=Z:\%RECHNER%.PQI

Siehtda noch irgendjemand irgendwelche Fehler ?! face-wink
bastla
bastla 24.04.2008, aktualisiert am 18.10.2012 um 18:35:39 Uhr
Goto Top
Hallo yakazaa und Biber!

Die Suche in Root mit "\*.PQI" basierte auf der Bestätigung oben, war aber zum Testen mit einer an einem anderen Ort gespeicherten Datei tatsächlich die "ungünstigste" Variante ...

Siehtda noch irgendjemand irgendwelche Fehler ?! face-wink
"Stand: 14:16 14.01.1999" face-wink

Wenn tatsächlich nicht mehr zu tun ist, als jetzt im Batch steht, ist die Zerlegung des Namens zumindest unnötig , und es sollte genügen:
for /f %%i in ('dir /b /a-d "*.PQI"') do set "RECHNER=%%i"  
z:
PQER /IFC /WFS /CMD=A:\RESTORE.SCR /IMG=Z:\%RECHNER%
Damit wäre auch für den Fall vorgesorgt, dass sich doch einmal in den Namen der .PQI-Datei ein Punkt einschleichen sollte. (Die Root-Angabe beim "dir"-Befehl habe ich weggelassen, obwohl ich sie weiterhin sinnvoll fände ...)

Grüße
bastla
yakazaa
yakazaa 25.04.2008 um 08:58:50 Uhr
Goto Top
Guten Morgen zusammen,

Habe gestern noch bis tief in die N8 mein Glück versucht, aber es wikll einfach nicht klappen.

Habe das Ganze wieder auf 2 Dateien aufgeteilt und das SVS-2.PQI wird auch erfolgreich übergeben.
Allerdings gibt Easy Restore einen Fehler aus, das Image könne nicht gefunden werden oder wäre ungültig. Quittiere ich mit OK, stehe ich wieder im DOS Modus bei Z:\>.
Gebe ich dann genau das ein, was die AUTOEXEC übergibt, also z.B.: RESTORE RECHNER-01 läuft die Recovery problemlos an und auch durch...

Ich glaube ich sollte das Ganze besser sein lassen, oder was meint Ihr ?!

Ausserdem erhalte ich noch immer einen Syntaxfehler, direkt nach der Ausgabe von MSCDEX:
MSCDEX Version 2,23
Copyright (C) Microsoft Corp. 1986 - 1993. Alle Rechte vorbehalten.
        Laufwerk Z: = Treiber ONIDE001 Gerät 0
Syntaxfehler
yakazaa
yakazaa 25.04.2008 um 09:10:01 Uhr
Goto Top
Ok, durch das Einfügen von Pausen habe ich jetzt rausbekommen, das der Syntaxfehler in der FOR Schleife auftritt.

Hier nochmal der Quellcode meiner AUTOEXEC:

@ECHO OFF

VER /R
PROMPT $P$G
VERIFY ON
PATH A:\
keyb gr
MSCDEX.EXE    /L:Z     /D:ONIDE001

z:
pause //bis hierher alles i.O.

for /f %%i in ('dir /b /a-d "*.PQI"') do set "RECHNER=%%i"  
// Syntaxfehler erscheint
echo %Rechner%
//Ausgabe: ECHO ist ausgeschaltet (OFF)
pause
RESTORE %RECHNER%
Biber
Biber 25.04.2008 um 20:31:50 Uhr
Goto Top
Moin yakazaa,

vielleicht kennt ja Dein Win95-Derivat noch keine FOR/F-Anweisung?
Ich weiß es nicht mehr so genau - als Win95 herauskam waren meine Erfahrungen mit Bat relativ einseitig...
... na gut, ich bin damals mit dem Batmobil über'n Flur gerollert, aber sonst...

Wenn es für Dein OS noch KEIN FOR/F gibt/gab und diese *.PQI auf dem Root der CD liegt wie es in Deinen allerallerersten Varianten oben zu sein scheint, dann reicht doch in der AUTOEXEC ein "FOR %%i ..." statt ein "FOR /F"
...
z:
REM auf Z:\, also dem CD-Lw im Root liegt die *PQI
REM dann statt der Restore.bat:
For %%i in (*.PQI) DO  PQER /IFC /WFS /CMD=A:\Restore.SCR /IMG=z:\%%i

Aber das brauchst Du nur ausprobieren, wenn bei Deiner Start-CD wirklich noch die Command.com statt der CMD.exe als Befehlsinterpreter aktiv sein sollte.
[Testen mit: "Set"-Eingabe am Prompt. Ein Wert davon sollte COMSPEC lauten und entweder A:\Command.com beinhalten oder A:\CMD.EXE]

Wenn das nicht so ist, dann haben wir irgendwo alle einen Denkfehler drin bzw. Deine Konstellation ganz falsch verstanden.

Grüße
Biber
yakazaa
yakazaa 28.04.2008 um 08:44:48 Uhr
Goto Top
Biber - du bist ein Tier face-wink

1000 Dank, es klappt jetzt endlich !
Ich arbeite mit der COMMAND.COM - von Windows 95 face-wink

Den COMSPEC Wert liefer ich später nach,
jetzt spielt er erstmal das Image zurück face-wink

Also: Danke noch mal und Tschüss !