Batch Variable in Dateinamen umleiten
Hallo, ich habe eine Frage:
in einem batch-Script sollen die aus einer zweizeiligen Datei ausgelesenen und vorbereiteten Daten als Variablen in einem neu zu erstellenden Dateinamen erscheinen:
for /f "delims=" %%f in (c:\neu.bdt) do call : loop "%%f"
goto ende
:loop
set "Quelle=%~1"
set "Ziel=%Quelle:~7%"
goto :eof
ein @echo %Ziel% bringt mir eine (richtige) zweizeilige Ausgabe mit den richtigen Daten.
Baue ich %Ziel% in den dateinamen ein, wird nur die letzte Variable verwendet.
Es sollen aber beide Variablen unmittelbar nebeneinander im Dateinamen erscheinen.
Beispiel:
@echo %Ziel% ergibt:
Haus
Baum
start "word" "k:\%Ziel%.doc
es wird k:\Baum.doc geöffnet, es soll aber k:\HausBaum.doc geöffnet werden.
Ich wäre für Hilfe dankbar.
alexander
in einem batch-Script sollen die aus einer zweizeiligen Datei ausgelesenen und vorbereiteten Daten als Variablen in einem neu zu erstellenden Dateinamen erscheinen:
for /f "delims=" %%f in (c:\neu.bdt) do call : loop "%%f"
goto ende
:loop
set "Quelle=%~1"
set "Ziel=%Quelle:~7%"
goto :eof
ein @echo %Ziel% bringt mir eine (richtige) zweizeilige Ausgabe mit den richtigen Daten.
Baue ich %Ziel% in den dateinamen ein, wird nur die letzte Variable verwendet.
Es sollen aber beide Variablen unmittelbar nebeneinander im Dateinamen erscheinen.
Beispiel:
@echo %Ziel% ergibt:
Haus
Baum
start "word" "k:\%Ziel%.doc
es wird k:\Baum.doc geöffnet, es soll aber k:\HausBaum.doc geöffnet werden.
Ich wäre für Hilfe dankbar.
alexander
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 117953
Url: https://administrator.de/contentid/117953
Ausgedruckt am: 26.11.2024 um 06:11 Uhr
8 Kommentare
Neuester Kommentar
Moin alexander01,
willkommen im Forum.
Der Denkfehler ist: das Innere des :loop-Blocks in Deinem Schnipsel wird bei jeder Zeile wieder neu ausgeführt.
Da nur die zuletzt gesetzte Variable %Ziel% nach Abarbeitung aller Zeilen "überlebt", ist das Ergebnis immer (egal ob Du 2 oder 2000 Zeilen liest) das Umformungsergebnis der letzten Zeile.
Es gibt mehrere mögliche Alternativstrategien:
Ich wähle mal die Strategie a)
[ungetestet]
Grüße
Biber
willkommen im Forum.
Der Denkfehler ist: das Innere des :loop-Blocks in Deinem Schnipsel wird bei jeder Zeile wieder neu ausgeführt.
Da nur die zuletzt gesetzte Variable %Ziel% nach Abarbeitung aller Zeilen "überlebt", ist das Ergebnis immer (egal ob Du 2 oder 2000 Zeilen liest) das Umformungsergebnis der letzten Zeile.
Es gibt mehrere mögliche Alternativstrategien:
- explizit die erste und die letzte Zeile lesen (geht schief, wenn nur eine Zeile da ist)
- explizit die Zeile #1 und die Zeile #2 lesen
- oder aber zu sagen: egal, ob 2,3 oder 5 Zeilen: ALLE Zeilen sollen aneinandergekettet werden und davon halt die ersten 8 Zeichen sind der Name.
Ich wähle mal die Strategie a)
@echo off & setlocal
::erste Zeile lesen
Set /p quelle=<c:\neu.bdt
::jetzt mit skip Zeile 1 überlesen
:: (und unterstellen, es gibt nur eine weitere Zeile!)
for /f "skip=1 delims=" %%f in (c:\neu.bdt) do set "Quelle=%quelle%%%f"
set "Ziel=%Quelle:~7%"
Start "whatever" "k:\%Ziel%.doc"
goto :eof
Grüße
Biber
Hallo Alexander
Hier nochmal eine Version um Dateien mit beliebiger Zeilenanzahl zu starten. öffnet also jedes Dokument nach auslesen jeder geraden Zeile.
Komma hinzugefügt
achso und wenn Du das zweite Token in Deiner Forschleife
for /f "tokens=1,* delims=:" %%i in ......
nicht auswertest genügt doch Dieser Code
gleich für Deinen Code angepasst und entschlakt
so... - Schusselfehler entfernt
nochn Fehler entfernt - man ich brauchn Batchprüftool - oder mach selbst eins...
Version 2.1b durch Version 2.2 ersetzt
Hier nochmal eine Version um Dateien mit beliebiger Zeilenanzahl zu starten. öffnet also jedes Dokument nach auslesen jeder geraden Zeile.
Komma hinzugefügt
@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%f in (c:\neu.bdt) do call :loop "%%f"
goto :eof
:loop
if not defined part1 (set part1=1 & set /a n+=1) else set part1=
set "Quelle=%~1"
if defined part1 set "Ziel%n%=%Quelle:~7%" else start "word" "k:\!Ziel%n%!,%Quelle:~7%.doc"
goto :eof
for /f "tokens=1,* delims=:" %%i in ......
nicht auswertest genügt doch Dieser Code
gleich für Deinen Code angepasst und entschlakt
@echo off & setlocal enabledelayedexpansion
for /f "delims=:" %%i in ('findstr /n $ %vz%\orig.bdt') do (for /L %%a in (6,2,8) do if %%i==%%a call :loop "%%i")
goto :eof
:loop
if not defined part1 (set part1=1 & set /a n+=1) else set part1=
set "Quelle=%~1"
if defined part1 set "Ziel%n%=%Quelle:~7%" else start "word" "k:\!Ziel%n%!,%Quelle:~7%.doc"
goto :eof
so... - Schusselfehler entfernt
nochn Fehler entfernt - man ich brauchn Batchprüftool - oder mach selbst eins...
Version 2.1b durch Version 2.2 ersetzt
Wie ist denn Deine orig.bdt aufgebaut?
es soll ja nur die 6. und 8. Zeile verwendet werden.
Wird vz gesetzt?
Ich hab ja Deine Batch net komplett bzw ohne
Set vz=....
Nimm die CMD und ersetze
mit
abspeichern
Wintaste+R
cmd
und Enter
dann ziehst Du Deinen Batch rein
und Enter
es soll ja nur die 6. und 8. Zeile verwendet werden.
Wird vz gesetzt?
Ich hab ja Deine Batch net komplett bzw ohne
Set vz=....
Nimm die CMD und ersetze
@echo off & setlocal enabledelayedexpansion
@echo ON & setlocal enabledelayedexpansion
Wintaste+R
cmd
und Enter
dann ziehst Du Deinen Batch rein
und Enter