Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch Variable in Dateinamen umleiten

Frage Entwicklung Batch & Shell

Mitglied: alexander01

alexander01 (Level 1) - Jetzt verbinden

10.06.2009, aktualisiert 20:11 Uhr, 6228 Aufrufe, 8 Kommentare

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
Mitglied: pieh-ejdsch
10.06.2009 um 21:03 Uhr
01.
@echo off & setlocal enabledelayedexpansion 
02.
for /f "delims=" %%f in (c:\neu.bdt) do call :loop "%%f" 
03.
start "word" "k:\%Ziel%.doc 
04.
goto :eof 
05.
:loop 
06.
set /a n+=1 
07.
set "Quelle%n%=%~1" 
08.
set "Ziel=%Ziel%!Quelle%n%:~7!" 
09.
goto :eof
Bitte warten ..
Mitglied: Biber
10.06.2009 um 21:15 Uhr
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:
  • 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)
01.
 @echo off & setlocal 
02.
::erste Zeile lesen 
03.
Set /p quelle=<c:\neu.bdt 
04.
::jetzt mit skip Zeile 1 überlesen 
05.
:: (und unterstellen, es gibt nur eine weitere Zeile!) 
06.
for /f "skip=1 delims=" %%f in (c:\neu.bdt) do set "Quelle=%quelle%%%f" 
07.
set "Ziel=%Quelle:~7%" 
08.
Start "whatever"  "k:\%Ziel%.doc" 
09.
goto :eof
[ungetestet]

Grüße
Biber
Bitte warten ..
Mitglied: alexander01
10.06.2009 um 21:38 Uhr
danke euch beiden!

Biber, die zweite Variante wäre mir die angenehmste! zwei (oder evtl. besser 3) definierte Zeilen sollten den Namen bilden.

Ich probiere gleich ...
danke

Grüße

alexander
Bitte warten ..
Mitglied: pieh-ejdsch
11.06.2009 um 01:08 Uhr
ups hab grad nen SchusselFehler von mir gesehen
Zeile 08
set "Ziel=%Ziel%!Quelle%n%:~7!"

wird gleich gefixt
Bitte warten ..
Mitglied: alexander01
11.06.2009 um 21:03 Uhr
Hallo,
ich habe jetzt auf der Basis eurer Informationen mein Script angepasst:
01.
if exist %vz%\oat_roh.bdt del %vz%\oat_roh.bdt 
02.
if exist %vz%\oat_fein.bdt del %vz%\oat_fein.bdt 
03.
 
04.
for /f "tokens=1,* delims=:" %%i in ('findstr /n $ %vz%\orig.bdt') do @(for /L %%a in (6,2,8) do @if %%i==%%a @echo %%j>>%vz%"\oat_roh.bdt") 
05.
 
06.
for /f "delims=" %%f in (%vz%\oat_roh.bdt) do call :sprung1 "%%f" 
07.
goto ende 
08.
 
09.
 
10.
:sprung1 
11.
set "Quelle=%~1" 
12.
set "Ziel=%Quelle:~7%" 
13.
@echo %Ziel%>>%vz%"\oat_fein.bdt" 
14.
goto :sprung2 
15.
 
16.
 
17.
:sprung2 
18.
set /p roh=<%vz%\oat_fein.bdt 
19.
for /f "skip=1 delims=" %%f in (%vz%\oat_fein.bdt) do set "fein=%roh%%%f" 
20.
goto :eof 
21.
 
22.
:ende 
23.
start "word" "k:\%fein%.doc"
mit einer zweizeiligen Datei funktioniert alles gut!
Noch zwei Fragen habe ich:
ist die Datei 3 oder 4-zeilig, funktioniert es nicht mehr, es wird, wie weiter oben besprochen, nur die erste und die letzte Zeile in den Namen (%fein%) übernommen.
1. Könnte man das Script noch verfeinern, um eine 3. und eine 4. Zeile hinzuzufügen (das reicht dann auch)?
2. Wie "formatiert" man %fein%, das nicht "wort1wort2" entsteht sondern z.B. "wort1, wort2" ?

ich danke für Hilfe

Gruß
Alexander




^^[Edit Biber] Code in Code-Tags gesetzt. [/Edit]
Bitte warten ..
Mitglied: pieh-ejdsch
11.06.2009 um 21:45 Uhr
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
01.
@echo off & setlocal enabledelayedexpansion 
02.
for /f "delims=" %%f in (c:\neu.bdt) do call :loop "%%f" 
03.
goto :eof 
04.
:loop 
05.
if not defined part1 (set part1=1 & set /a n+=1) else set part1= 
06.
set "Quelle=%~1" 
07.
if defined part1 set "Ziel%n%=%Quelle:~7%" else start "word" "k:\!Ziel%n%!,%Quelle:~7%.doc"  
08.
goto :eof
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
01.
@echo off & setlocal enabledelayedexpansion 
02.
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") 
03.
goto :eof 
04.
:loop 
05.
if not defined part1 (set part1=1 & set /a n+=1) else set part1= 
06.
set "Quelle=%~1" 
07.
if defined part1 set "Ziel%n%=%Quelle:~7%" else start "word" "k:\!Ziel%n%!,%Quelle:~7%.doc"  
08.
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
Bitte warten ..
Mitglied: alexander01
13.06.2009 um 10:08 Uhr
funktioniert bei mir nicht, habe "pause" eingebaut, trotzdem wird nichts angezeigt, der das Fenster wird sofort geschlossen.
gruß
Alexander
Bitte warten ..
Mitglied: pieh-ejdsch
13.06.2009 um 13:26 Uhr
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
01.
@echo off & setlocal enabledelayedexpansion
mit
01.
@echo ON & setlocal enabledelayedexpansion
abspeichern
Wintaste+R
cmd
und Enter
dann ziehst Du Deinen Batch rein
und Enter
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Variable setzten mit Leerzeichen (3)

Frage von Marlon1 zum Thema Batch & Shell ...

Batch & Shell
Batch: Variable Expansion in einer FOR-Schleife (9)

Frage von .Sessl zum Thema Batch & Shell ...

Batch & Shell
gelöst In Batch variable DOS-Funktion von "größer" und "kleiner" Zeichen unterdrücken (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...