Top-Themen

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, 6422 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
Entwerten von Sonderzeichen, die durch Dateinamen in eine Batch-Variable kommen...
gelöst Frage von dctibiBatch & Shell8 Kommentare

Hallo, immer wieder habe ich in einer Batch Probleme mit Sonderzeichen - Leertasten an umöglichen Stellen, alle Arten von ...

Batch & Shell
In einer Batch-Datei einen variablen Teil eines Dateinamens auslesen
gelöst Frage von dh0815Batch & Shell5 Kommentare

Hallo Leute, das ist mein erster Post hier und ich möchte mich vorab schon dafür entschuldigen, wenn ich etwas ...

Batch & Shell
Dateinamen mit Punkt einer Variablen zuweisen
gelöst Frage von DanilowitzBatch & Shell4 Kommentare

Hallo Leute, Bin neu hier im Forum und hätte eine Frage zur Batchprogrammierung, zu welcher ich im Internet keine ...

Batch & Shell
Variabler Dateiname innerhalb einer Batchdatei
gelöst Frage von SpikeeeBatch & Shell5 Kommentare

Hallo Liebe Gemeinde! Vielleicht eine relativ simpel zu lösende Aufgabe, jedoch tu ich mich da grad ein wenig schwer, ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 6 StundenViren und Trojaner1 Kommentar

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 10 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware8 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...