Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 6401 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst In einer Batch-Datei einen variablen Teil eines Dateinamens auslesen (5)

Frage von dh0815 zum Thema Batch & Shell ...

Sonstige Systeme
Batch Dateinamen zerlegen (5)

Frage von Mummel zum Thema Sonstige Systeme ...

Batch & Shell
Zu viele Variablen in Batch-Script? Speicherproblem? (2)

Frage von dolsch zum Thema Batch & Shell ...

Batch & Shell
gelöst Wert aus Batch Schleife in Variable speichern (5)

Frage von anmelder zum Thema Batch & Shell ...

Neue Wissensbeiträge
Ubuntu

Ubuntu 17.10 steht zum Download bereit

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(6)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Router & Routing ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

Windows 10
Windows 10 Ordnerfreigabe (14)

Frage von Xaero1982 zum Thema Windows 10 ...