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:
RESTORE.BAT sieht so aus:
Leider wird mir immer ein Syntaxfehler ausgegeben.
Ich hoffe Ihr könnt mir helfen !!
Schonmal ein dickes Danke im Voraus !!!
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
Ich hoffe Ihr könnt mir helfen !!
Schonmal ein dickes Danke im Voraus !!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
19 Kommentare
Neuester Kommentar
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:
[/Edit]
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"
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.
Grüße
bastla
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 obenGrüße
bastla
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
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
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 ...
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:
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
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 ?!
"Stand: 14:16 14.01.1999" 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%
Grüße
bastla
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"
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
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