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

Per Batch bestimmte Zeilen einer Textdatei in eine 2. Textatei kopieren

Frage Entwicklung Batch & Shell

Mitglied: Moni71

Moni71 (Level 1) - Jetzt verbinden

08.07.2010 um 15:29 Uhr, 13333 Aufrufe, 4 Kommentare

Hallo !

Ich versuche schon eine Weile aus einer Textdatei mit sehr langen Datensätzen (ca. 840 Zeichen) bestimmte Zeilen in eine zweite Datei zu kopieren.

Es sollen nur die Zeilen in die 2. Datei geschrieben werden, die an Stelle 322 den Inhalt "02", "03" oder "91" haben. Alle anderen sollen ignoriert werden.

mein Ansatz:

@echo off

for /f %%i in (eingabedatei.txt) do (

set zeile=%%i
set vergl=%zeile:~321,2%

if "%Vergl%"=="91" echo %zeile%>>ausgabedatei.txt
if "%Vergl%"=="02" echo %zeile%>>ausgabedatei.txt
if "%Vergl%"=="03" echo %zeile%>>ausgabedatei.txt
)


Das funktioniert nicht.

In der Variable "Zeile" stehen nur die ersten 18 Zeichen der Datenzeile. (Die Textdatei enthält auch Leerzeichen innerhalb der Zeilen. Kann das damit zusammenhängen?)

In der Variable "Vergl" steht "~321,2" drin, statt der Inhalt. Das kann aber nichts mit der Textlänge zu tun haben. Zum Test habe ich es mit Postition 8 im Text versucht: Das selbe Problem.

Kann mir hier jemand weiterhelfen???? Ich habe schon die verschiedensten Foren erfolflos durchsucht.
Mitglied: Biber
08.07.2010 um 15:56 Uhr
Moin Moni71,

Ich habe schon die verschiedensten Foren erfolflos durchsucht.
Wozu das denn? Batches dekliniert doch kein anderes Forum so durch wie wir...

Du musst nochmal kurz vor den kommenden Batches mit "SetLocal /?" am CMD-Prompt recherchieren.

Da erfährst du dann ausführlicher, dass
a) mit "SetLocal" alle im Batch verwendeten Variablen als "nur für diesen Batch sichtbar" angekündigt werden
b) mit "SetLocal EnableDelayedExpansion" eine "verzögerte Variablenauflösung" ermöglicht wird, die erlaubt, Variablen innerhalb einer CMD-Befehlszeile zu setzen und zu lesen.

Dein Schnipsel würde danach sinngemäß so aussehen:
01.
@echo off & SetLocal EnableDelayedExpansion 
02.
 
03.
for /f %%i in (eingabedatei.txt) do ( 
04.
 
05.
set "zeile=%%i" 
06.
set "vergl=%zeile:~321,2%" 
07.
 
08.
if "!Vergl!"=="91" echo %%i>>ausgabedatei.txt 
09.
if "!Vergl!"=="02" echo %%i>>ausgabedatei.txt 
10.
if "!Vergl!"=="03" echo !zeile!>>ausgabedatei.txt 
11.
)
Bei der 1.+2. "IF !vergl!" -Anweisung habe ich mal das "%%i" ECHOen lassen -> da ist keine Schreibweise mit "!" statt "%" möglich/nötig.
Bei allen statischen Variablen, die innerhalb von IF() oder FOR()-Anweisungsklammern gesetzt werden aber schon.

Grüße
Biber
Bitte warten ..
Mitglied: Moni71
08.07.2010 um 17:05 Uhr
Hallo Biber!

Danke für Deine schnelle Antwort.

Ich habe den Code extra über die Zwischenablage eingefügt, um Tippfehler auszuschließen.

Leider habe ich immer noch das Problem, dass die Datenzeile abgeschnitten wird (offensichtlich beim ersten Leerzeichen).
Die Textdatei hat Datensätze mit einer Länge von ca. 840 Zeichen an festen Positionen. Dazwischen sind immer wieder auch Leerzeichen (mehrere).

In der Variable "vergl" steht als Inhalt: ~321,2

Ich versteh das einfach nicht.
Dürfen etwa keine Leerzeichen in der Datenzeile sein? Oder gibt es eine maximal zulässige Länge des Datensatzes, die hier überschritten wird?
Bitte warten ..
Mitglied: bastla
08.07.2010 um 17:06 Uhr
Hallo Moni71!

Damit die Zeilen trotz der Leerzeichen komplett eingelesen werden, noch die Zeile 3 auf
for /f "delims=" %%i in (eingabedatei.txt) do (
ergänzen, und die Zeile 6 sollte (im Sinne der angeführten Erklärungen) eher so aussehen:
set "vergl=!zeile:~321,2!"
Grüße
bastla
Bitte warten ..
Mitglied: Moni71
08.07.2010 um 17:21 Uhr
Hallo bastla!

Danke für den Tip. Jetzt funktioniert es.

Liebe Grüße

Moni71
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Win7-Batch - bestimmte Ordner in TEMP löschen (1)

Frage von jan99 zum Thema Batch & Shell ...

PHP
gelöst TXT Datei auslesen und bestimmte Zeilen in Variable setzen (11)

Frage von 126594 zum Thema PHP ...

Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(2)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(9)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Heiß diskutierte Inhalte
Exchange Server
Exchange 2016 Standard Server 2012 R2 Hetzner Mail (36)

Frage von Datsspeed zum Thema Exchange Server ...

Windows 7
Lokales Adminprofil defekt (15)

Frage von Yannosch zum Thema Windows 7 ...

Verschlüsselung & Zertifikate
Mit Veracrypt eine zweite interne (non-system) Festplatte verschlüsseln (11)

Frage von Bernulf zum Thema Verschlüsselung & Zertifikate ...

Internet Domänen
Nameserver ein Geist? (9)

Frage von zelamedia zum Thema Internet Domänen ...