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

Mit batch-script wert in b.txt durch wert aus a.txt ersetzen

Frage Entwicklung Batch & Shell

Mitglied: Lowered

Lowered (Level 1) - Jetzt verbinden

09.08.2010 um 19:16 Uhr, 5626 Aufrufe, 13 Kommentare

Ersetzen eines Parameters an einer bestimmten Stelle in einer txt-Datei durch einen Parameter aus einer anderen txt-Datei

Hallo die Damen und Herren,
ich beschäftige mich betriebsbedingt mit Batch-Script. Genutzt wird es für eine Programmkopplung, also Programme ausführen und Werte aus Dateien hin und her kopieren. Genau da liegt auch das Problem.

Also, Werte aus Dateien auslesen schaffe ich mittlerweile schon.
Ich sitze seit 3 Tagen daran, in einer Datei Lag1.ein 5 Parameter zu ändern. Wenn ich einen schaffe, geht der rest ja von alleine.

Strategie:
die Zeile mit dem Parameter den ich ändern möchte aus Lag1.ein mit find auslesen>> var1=FRX = 134.45
Den neuen Wert lese ich aus der Datei Lagerkraft.txt aus>> kra1=FRX = 3455.34

Ich habe eine Funktion gefunden, die nun die Datei Lag1.ein zeilenweise ausliest und mit var1 vergleicht. wenn die Zeile ungleich var1 ist wird sie in eine datei Lag11.ein kopiert
Ist die Zeile = var1, wird var1 durch kra1 ersetzt und in Lag11.ein kopiert ...

Offensichtlich gibt es da aber probleme mit den Leerzeichen innerhalb der Variablen, das Ergebnis des Ersetzens ist:
= 134.45 FRX = 3455.34 = 134.45 (hab die Zeichenfolge nicht ganz genau im Kopf)

Meinen Code kann ich erst morgen Nachmittag posten, der liegt leider noch auf Arbeit.

Aber vielleicht hat jemand eine Idee was mein Problem ist. Ich gehe davon aus das mir lediglich Klammern, Anführungszeichen oder ähnliches fehlen um den ganzen 'String' zu vergleichen bzw zu ersetzen.


Für Hilfe bin ich sehr dankbar, damit ich mit meiner Bachelorarbeit endlich mal wieder vorrankomme.


Grüße

H. Esche
Mitglied: bastla
09.08.2010 um 19:27 Uhr
Hallo Lowered und willkommen im Forum!

Ließe sich die Beschreibung auch so darstellen?
Lagerkraft.txt:
01.
Zeile L1 
02.
FRX = 3455.34 
03.
... 
04.
Zeile Lx
lag1.ein Ist:
01.
Zeile 1 
02.
FRX = 134.45 
03.
... 
04.
Zeile x
lag1.ein Soll:
01.
Zeile 1 
02.
FRX = 3455.34 
03.
... 
04.
Zeile x
Grüße
bastla
Bitte warten ..
Mitglied: Lowered
09.08.2010 um 20:09 Uhr
bei der Datei Lagerkraft ist alles möglich, diese erstelle ich selbst aus Ansys. Allerdings wäre mir die Matrixschreibweise "lieber" um die Werte zuordnen zu können. Ich habe im Ansys ein Getriebe, dort werte ich an jedem Lager Kräfte und Biegung aus. Wie ich die ausgebe, bleibt mir überlassen.
Lagerkraft.txt
Zeile L1
FRX = 3455.34
FRY = ...
...

Zeile L2
FRX = ....
....

Zeile L3
da ist "alles" möglich, solange es irgendwie übersichtlich bleibt.

bei der lag1.ein ist das nicht möglich. Das ist eine Eingabedatei für ein Fortran Programm, da gibt es eine bestimmte Struktur:
Lag1.ein
$Lagerdaten
...
$Darstellung
...
$Lagerkraefte
FRX = 134.45
FRY = ...
...
$Ende

Wie gesagt ich habe die Werte die ich will schon als Parameter, nur beim ersetzen läuft da etwas durcheinander. Ich Poste morgen die Dateien, sowie das Batch-Script.
Sofern es schnellere, bessere Lösungen gibt, bin ich natürlich offen.

Danke @ bastla
Bitte warten ..
Mitglied: bastla
09.08.2010 um 20:26 Uhr
Hallo Lowered!

Nach Deiner Darstellung könnte es in "Lagerkraft.txt" mehrere Zeilen mit "FRX =" geben - welche wäre dann zu verwenden?

Ansonsten warte ich mal auf morgen ...

Grüße
bastla
Bitte warten ..
Mitglied: Lowered
10.08.2010 um 15:42 Uhr
So, los geht es.

derzeit sieht die datei LAgerkraft wie folgt aus:

01.
L1;103926.46;      0.00;      0.00; 
02.
L2;101059.69;     15.31;  27690.71; 
03.
L3;124402.50;     -3.28; -27924.22; 
04.
L4; 93513.70;     -0.04;      0.00; 
05.
> 
Das ist beliebig änderbar. Der Inhalt ist (jetzt) eine Tabelle die für jede Lagerstelle die Kraft FRX, FRY und FRZ enthält. Wenn das hilft, könnte man jeder Variable noch eine Nummer anfügen für die Lagerstelle, sprich FRX1 ...

Die Datei Lag1.ein sieht immer folgendermaßen aus:
01.
$ Lagerbelastung 
02.
 
03.
DREHZAHL = 1800 
04.
FRX = 1234 
05.
FRY = 69529 
06.
FAZ = 0 
07.
WBETA =  0.0 
08.
WGAMMA = 0.0 
09.
 
10.
$ Ende 
11.
> 
halt mit unterschiedlichen Zahlenwerten, aber die Variablen heißen gleich. Lag[Nr].ein gibt es für jede Lagerstelle, wird später noch umbenannt und in ein anderes Verzeichnis kopiert, aber das ist ja nicht schwer.

Jetzt habe ich mir folgendes zusammengefummel:

01.
@ECHO off 
02.
SETLOCAL enabledelayedexpansion 
03.
 
04.
REM Suchen der Lagerkraft aus datei 
05.
 
06.
find "L1" Lagerkraft.txt > temp1.txt 
07.
for /f "tokens=2 delims=;" %%A in (temp1.txt) do set kra1=FRX = %%A 
08.
 
09.
REM Suchen und Ersetzen in einer Textdatei 
10.
 
11.
FOR /F "tokens=*" %%B in ('find "FRX" Lag1.ein') DO SET var1=%%B 
12.
 
13.
SET "quell_datei=Lag1.ein" 
14.
SET "ziel_datei=Lag11.ein" 
15.
 
16.
REM Ausgabe einer Fehlermeldung und Programmabbruch 
17.
REM falls die Variable "suchen_nach" nicht definiert ist 
18.
IF NOT DEFINED var1 (ECHO Fehler: Die Variable suchen_nach nicht definiert^^!&GOTO :eof) 
19.
 
20.
REM Loeschen der Ausgabedatei, falls sie (noch) existiert 
21.
IF EXIST %ziel_datei% (DEL /f %ziel_datei% 1>NUL 2>NUL) 
22.
 
23.
REM Quell-Datei zeilenweise auslesen  
24.
REM und in Variable "zeile" schreiben 
25.
FOR /f "delims=*" %%i IN ('FINDSTR . "%quell_datei%"') DO ( 
26.
SET zeile=%%i& CALL :ersetzen !zeile! 
27.
28.
GOTO :weiter 
29.
:ersetzen 
30.
REM innerhalb der Variable "zeile" 
31.
REM den Inhalt der Variable "suchen_nach" suchen 
32.
REM und diese durch den Inhalt der Variable "ersetzen_durch" ersetzen 
33.
SET zeile=!zeile:%var1%=%kra1%! 
34.
 
35.
REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben 
36.
IF [!zeile!] EQU [] (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%) 
37.
GOTO :eof 
38.
 
39.
:weiter 
40.
REM weitere Verarbeitung 
41.
> 

Das ganze findet erstmal in einem Ordner statt. Ich lese den Wert für FRX aus der Datei Lagerkraft aus und lege ihn in %kra1 ab.
Ich suche in Lag1.ein die Zeile in der FRX = ... steht und speichere den Inhalt der Zeile in %var1

Quelldatei ist Lag1.ein
Zieldatei ist Lag11.ein

Dann wird alles bis FRX sauber von Quell- in Zieldatei kopiert. In der Zeile von FRX steht dann:
-23077=FRX = 103926.46= -23077
Danach wird wieder suaber kopiert.

Mein Verdacht: der Vergleich der beiden Strings funktioniert wegen der enthaltenen Leerzeichen nicht.

Anschließend muss ich noch die anderen (bisher) 2 Parameter ändern. Das werde ich vermutlich alles auf einmal machen.

Für einen Augenblick habe ich schon drüber nachgedacht Lag1.ein bis FRX zu kopieren und danach die die Werte hart in die Datei reinzuschreiben. Allerdings würde ich mir die Kontrollmöglichkeit durch das auslesen und vergleichen gern offen halten.

Oder gibt es noch bessere Verfahren / Möglichkeiten mittels Batch?
Habe mir angelesen das das Umkopieren dringend zu empfehlen ist, da es sonst zu Datenverlust kommen könnte.

Dann bin ich jetzt mal gespannt wie sich das ganze entwickelt.
Bitte warten ..
Mitglied: bastla
10.08.2010 um 18:08 Uhr
Hallo Lowered!

Ich würde es geringfügig anders anlegen (und dabei gleich für "Lag2.ein", "Lag3.ein", etc - können dann über eine weitere Schleife verarbeitet werden - vorsorgen):
01.
@echo off & setlocal 
02.
set "quell_datei=Lag1.ein" 
03.
set "lager=Lagerkraft.txt" 
04.
 
05.
REM Dateinamen (mit Pfad, aber ohne Typ) ermitteln 
06.
for %%i in ("%quell_datei%") do set "quell_datei_n=%%~dpni" 
07.
REM Dateinummer (=letzte Stelle des Namens) ermitteln 
08.
set "quell_datei_nr=%quell_datei_n:~-1%" 
09.
REM Zieldateinamen erzeugen 
10.
set "ziel_datei=%quell_datei_n%1.ein" 
11.
 
12.
REM FR* entsprechend der Dateinummer auslesen (dabei Leerzeichen entfernen) und den Variablen %X%, %Y% und %Z% zuweisen 
13.
for /f "tokens=2-4 delims=; " %%a in ('findstr /b "L%quell_datei_nr%;" "%lager%"') do set "X=FRX = %%a" & set "Y=FRY = %%b" & set "Z=FRZ = %%c" 
14.
 
15.
REM Loeschen der Ausgabedatei 
16.
del /f "%ziel_datei%" 2>nul 
17.
 
18.
REM Quell-Datei zeilenweise auslesen, in Variable %zeile% schreiben und Verarbeitungs-Unterprogramm aufrufen 
19.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%quell_datei%"') do set "zeile=%%j" & call :ProcessLine 
20.
GOTO :weiter 
21.
 
22.
:ProcessLine 
23.
REM Auf FR*-Zeile prüfen und ggf ersetzen 
24.
if defined zeile for %%a in (X Y Z) do echo %zeile%|findstr /b /c:"FR%%a =">nul && (echo %%a & call set "zeile=%%%%a%%") 
25.
REM Zeile in Zieldatei schreiben 
26.
>>"%ziel_datei%" echo\%zeile% 
27.
GOTO :eof 
28.
 
29.
:weiter 
30.
REM weitere Verarbeitung
Ev ist
call set "zeile=%%%%a%%"
etwas erklärungsbedürftig: Damit wird der Variablen %zeile% je nach Inhalt von %%a der Variableninhalt von %X% oder %Y% oder %Z% zugewiesen - zur Veranschaulichung durch "_" getrennt geschrieben sähe der letzte Teil so aus: %%_%%a_%%, woraus wegen des "call" dann eben (jetzt wieder ohne Trennzeichen) zB %X% wird ...

Grüße
bastla
Bitte warten ..
Mitglied: Lowered
11.08.2010 um 16:39 Uhr
Erfolgsmeldung!

Das Script funktioniert super. Habe noch ein paar kleine Änderungen vorgenommen um weitere Variablen einzulesen.

Recht herzlichen Dank für die Mühe @bastla
Bitte warten ..
Mitglied: bastla
11.08.2010 um 18:23 Uhr
Hallo Lowered!

Freut mich, wenn's passt ...

Grüße
bastla

P.S.: "Mühe" war dabei nicht im Spiel ...
Bitte warten ..
Mitglied: Lowered
12.08.2010 um 15:02 Uhr
Hallo, ich nochmal.

habe Heute nochmal ein wenig daran rumgebastelt um das Ganze besser portierbar zu machen. Also habe ich versucht die absoluten Pfadangaben in Variablen zu packen, mit dem Ergebnis, das jetzt an den Stellen FRX, FRY und FAZ nichts mehr geschrieben wird.


01.
 
02.
@echo off & setlocal 
03.
 
04.
REM Dateipfade müssen angepasst werden!!! 
05.
REM Pfad für Dateien 
06.
set "dat=H:\Lagerkram\Testlauf2\Dateien\" 
07.
 
08.
REM Pfad zu LAGER2HP 
09.
set "lag=H:\Lagerkram\Testlauf2\Lager2\" 
10.
 
11.
REM Pfad zu ANSYS 
12.
set "ans=" 
13.
 
14.
 
15.
set /p "anzahl="<"%dat%Lagerzahl.txt" 
16.
set "nr=1" 
17.
 
18.
cd /D %dat% 
19.
 
20.
set "lager=%dat%Lagerkraft.txt" 
21.
REM Zieldateinamen erzeugen 
22.
set "ziel_datei=%lag%work\Lager2.ein" 
23.
 
24.
:anfang 
25.
 
26.
cd /D %dat% 
27.
 
28.
set "quell_datei=%dat%Lag%nr%.ein" 
29.
 
30.
REM Dateinamen (mit Pfad, aber ohne Typ) ermitteln 
31.
for %%i in ("%quell_datei%") do set "quell_datei_n=%%~dpni" 
32.
REM Dateinummer (=letzte Stelle des Namens) ermitteln 
33.
set "quell_datei_nr=%quell_datei_n:~-1%" 
34.
 
35.
REM FR* entsprechend der Dateinummer auslesen (dabei Leerzeichen entfernen) und den Variablen %X%, %Y% und %Z% zuweisen 
36.
for /f "tokens=2-4 delims=;" %%a in ('findstr /b "%quell_datei_nr%;" "%lager%"') do set "X=FRX = %%a" & echo %X% & set "Y=FRY = %%b" & set "Z=FAZ = %%c" 
37.
 
38.
 
39.
REM Loeschen der Ausgabedatei 
40.
del /f "%ziel_datei%" 2>nul 
41.
 
42.
REM Quell-Datei zeilenweise auslesen, in Variable %zeile% schreiben und Verarbeitungs-Unterprogramm aufrufen 
43.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%quell_datei%"') do set "zeile=%%j" & call :ProcessLine 
44.
GOTO :weiter 
45.
 
46.
:ProcessLine 
47.
REM Auf FR*-Zeile prüfen und ggf ersetzen 
48.
if defined zeile for %%a in (X Y) do echo %zeile%|findstr /b /c:"FR%%a =">nul && (echo %%a & call set "zeile=%%%%a%%") 
49.
if defined zeile for %%a in (Z) do echo %zeile%|findstr /b /c:"FA%%a =">nul && (echo %%a & call set "zeile=%%%%a%%") 
50.
REM Zeile in Zieldatei schreiben 
51.
>>"%ziel_datei%" echo\%zeile% 
52.
GOTO :eof 
53.
 
54.
:weiter 
55.
REM weitere Verarbeitung 
56.
 
57.
cd /D %lag%BIN 
58.
start %lag%BIN\LAGER2HP.exe 
59.
echo warten auf LAGER2HP Ergebnis 
60.
ping 127.0.0.1 -n 5 > nul 
61.
 
62.
 
63.
REM Ergebnisse auslesen und in Datei schreiben 
64.
 
65.
if %nr% EQU 1 type nul > %dat%Versch.txt 
66.
 
67.
 
68.
find "RAD. VERLAGERUNG IN X-RICHTUNG" %lag%work\LAGER2.AUS > temp.txt 
69.
for /F "delims=GM  skip=2 tokens=4" %%a in (temp.txt) do @set zeile1=%%a 
70.
 
71.
find "RAD. VERLAGERUNG IN Y-RICHTUNG" %lag%work\LAGER2.AUS > temp.txt 
72.
for /F "delims=GM  skip=2 tokens=4" %%b in (temp.txt) do @set zeile2=%%b 
73.
 
74.
find "AX. VERLAGERUNG IN Z-RICHTUNG" %lag%work\LAGER2.AUS > temp.txt 
75.
for /F "delims=GM  skip=2 tokens=4" %%c in (temp.txt) do @set zeile3=%%c 
76.
REM Werte in Ergebnisdatei schreiben 
77.
echo   %zeile1% %zeile2%%zeile3% >> H:\Lagerkram\Testlauf2\Dateien\Versch.txt 
78.
 
79.
REM LAGER2.AUS umkopieren 
80.
copy %lag%work\lager2.aus %lag%work\Lager2%nr%.aus 
81.
 
82.
set /a nr+=1 
83.
if %nr% leq %anzahl% goto :anfang 
84.
 
85.
echo fertig 
86.
 
Womit nur hab ich das verdient? Ich nehme an, das es an Steuerzeichen ("%) liegt
Bitte warten ..
Mitglied: bastla
13.08.2010 um 01:20 Uhr
Hallo Lowered!

Wenn in der "Lagerkraft.txt" die Zeilen weiterhin mit "L1", "L2", etc beginnen, wirst Du weiterhin auch das "L" in den Suchbegriff aufnehmen müssen - als Zeile 36 daher:
for /f "tokens=2-4 delims=;" %%a in ('findstr /b "L%quell_datei_nr%;" "%lager%"') do set "X=FRX = %%a" & echo %X% & set "Y=FRY = %%b" & set "Z=FAZ = %%c"
Da Du das Leerzeichen als "Delimiter" wieder entfernt hast, nehme ich an, dass Du die Schreibweise
FRY =      -0.04
der Variante
FRY = -0.04
vorziehst ...
Die Zeilen 48 und 49 lassen sich übrigens wieder zusammenfassen (den Unterschied "FRX" zu "FAZ" hatte ich leider nicht berücksichtigt):
if defined zeile for %%a in (X Y Z) do echo %zeile%|findstr /b /r /c:"F[AR]%%a =">nul && (echo %%a & call set "zeile=%%%%a%%")
Den Rest habe ich mir nur oberflächlich angesehen; auf die jeweiligen "temp.txt" würde ich jedenfalls verzichten - etwa so:
for /F "skip=2 tokens=4 delims=GM" %%a in ('find "RAD. VERLAGERUNG IN X-RICHTUNG" "%lag%work\LAGER2.AUS"') do @set "zeile1=%%a"
wobei ich im Zweifelsfall zu "findstr" anstelle von "find" tendiere ...

Grüße
bastla
Bitte warten ..
Mitglied: Lowered
13.08.2010 um 09:08 Uhr
Hello,

also das L hatte ich bewusst entfernt, das ist nicht so wichtig.

Das es mehrere Zeilen für die Variablennamen FR und FA gibt ist auch ok, da kommen noch 2-3 ganz andere dazu.

Der obige Code hat prima funktioniert als ich die ganzen Pfade noch in den jeweiligen Zeilen hatte. Das habe ich dann versucht abzukürzen, indem ich die Pfade zu den einzelnen verzeichnissen (Daten, Programme) in eine Variable schreibe und überall da wo vorher der pfad stand nun %dat% oder %lag% schreibe.
Bisherige Erkenntnis ist, es steht und fällt mit der Datei Lagerkraft. Diese wird vermutlich beim set Befehl erkannt, kann aber danach nicht geöffnet werden wenn es um das auslesen geht.

Das kommt in der Lager2.ein Datei an:

01.
$ Lagerbelastung  
02.
DREHZAHL = 1800  
03.
 
04.
 
05.
 
06.
WBETA =  0.0  
07.
WGAMMA = 0.0  
08.
$ Ende 
d. h. in dem Bereich wo FRX, FRY und FAZ in die Datei kopiert werden sollen, läuft jetzt etwas falsch. Der Vergleich zwischen Quell und Zieldatei scheint noch zu funktionieren, sonst würde ja einfach weiter kopiert werden. Nur der Inhalt der Vergleichsvariablen kommt nicht in der Lager2.ein Datei an.

Das fehlende Leerzeichen bei den Delimitern ist Opfer meiner hochprofessionellen Fehlersuche geworden ;)

Grüße und vielen Dank.

Lowered
Bitte warten ..
Mitglied: bastla
13.08.2010 um 10:01 Uhr
Hallo Lowered!
in dem Bereich wo FRX, FRY und FAZ in die Datei kopiert werden sollen, läuft jetzt etwas falsch.
Eher nicht; den Fehler würde ich, so wie Du das ohnehin schon angedeutet hattest, beim Auslesen aus der "Lagerkraft.txt" (also in Zeile 36) suchen - füge doch einfach einmal danach eine Zeile
echo %X%_%Y%_%Z% & pause
ein ...

Abgesehen davon kannst Du das "echo off" in der ersten Zeile während der Testphase in ein "echo on" änderrn und so dem Batch "beim Arbeiten zuschauen"; sinnvoll wäre es dazu auch, direkt von der Kommandozeile zu starten und vorweg über einen Klick links in der Titelleiste des CMD-Fensters die "Eigenschaften" und dort "Layout" aufzurufen und die Höhe der "Fensterpuffergröße" auf einen höheren Wert (ich verwende den Maximalwert 9999) zu setzen - so kannst Du entsprechend weit nach oben scrollen ...

Grüße
bastla
Bitte warten ..
Mitglied: Lowered
13.08.2010 um 10:50 Uhr
Hilfe zur Selbsthilfe ist eben doch die beste!

Problem gefunden und verstanden:

01.
for /f "tokens=2-4 delims=;" %%a in ('findstr /b "%quell_datei_nr%;" "%lager%"') do set "X=FRX = %%a" & echo %X% & set "Y=FRY = %%b" & set "Z=FAZ = %%c" 
hat an der Stelle 'findstr /b "%quell_datei_nr% ein Problem mit der Lagerkraft.txt
dort steht vor den Nummern 1-9 Systembedingt ein Leerzeichen.
In der Ansysausgabe muss ich für Lagernummern größer 9 aber 2Speicherplätze reservieren. Also könnte ich im APDL eine Unterschiedung beim Speichern machen, für Nr <= 9 ein Speicherplatz, Nr > 9 2 Plätze.
Oder gibt es da im Batch-Script eine Möglichkeit ein ggf. erstes Leerzeichen zu Überspringen?
Wenn ich beim Aufruf ein Leerzeichen voranstelle ==>" %quell... werden nur noch die Zeilen mit Leerzeichen gelesen.

Was macht denn "°" ?
Bitte warten ..
Mitglied: bastla
13.08.2010 um 11:36 Uhr
Hallo Lowered!

Wenn die Nummer immer 2 Zeichen umfasst (für Werte unter 10 eben ein Leerzeichen vorweg), ließe sich das so lösen:
set "quell_datei_nr= %quell_datei_n:~-1%" 
set "quell_datei_nr=%quell_datei_nr:~-2%"
Hier wird zunächst vor die aus dem Dateinamen ausgelesene Nummer auf jeden Fall ein Leerzeichen gesetzt, dann aber das Ergebnis auf die letzten beiden Stellen beschränkt - dadurch kannst Du dann wieder ganz einfach nach %quell_datei_nr%" suchen ...
Was macht denn "°" ?
Falls Du damit "^" aus dem "findstr" meinen solltest - der Hilfe kannst Du entnehmen, dass dieses Zeichen alternativ zu "/b" dazu verwendet werden kann, für die Suche "Zeilenposition: Anfang der Zeile" vorzugeben - in der konkreten Anwendung hat es einfach den Sinn, jede Zeile zu suchen, die einen Zeilenanfang hat (und das sollten nun wirklich alle vorkommenden Zeilen sein ; beim Zeilenende ist das nicht so sicher - Stichwort "Windows-Zeilenschaltung CR + LF") - also etwas kürzer formuliert: Damit werden alle Zeilen der Datei erfasst und mit "/n" nummeriert - Zweck der Übung ist es, Leerzeilen, die ansonsten in einer "for /f"-Schleife durch den Rost fallen, ebenfalls "mitzunehmen" ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
CMD-Batch hilfe: Dateiname zu txt (2)

Frage von Syscore64 zum Thema Batch & Shell ...

Batch & Shell
Batch Script Editor - Programmvorstellung des Entwicklers (16)

Tipp von wowItsDoge zum Thema Batch & Shell ...

Windows Server
Batch Script bei Start ausführen (3)

Frage von KEFHVDI zum Thema Windows Server ...

Batch & Shell
Batch-Script für Lizenzen (3)

Frage von stoepsu77 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...