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

Dos batchjob zeilen und zeichen aus datei extrahieren

Frage Entwicklung Batch & Shell

Mitglied: instinctless

instinctless (Level 1) - Jetzt verbinden

10.02.2011, aktualisiert 08:14 Uhr, 6756 Aufrufe, 22 Kommentare

hallo leute, ich hab ein dringendes problem und leider nicht die nötige zeit mich in die dosshell einzuarbeiten. die lösung muss irgendwie heute auf den tisch.
ich habe gestern schon angefangen die anforderung umzusetzen, stecke aber fest was vermutlich an meinem mangelndem knowhow in sachen dos liegt.
es wäre nett wenn ihr mir helfen könntet.
Ich defiere erst einmal die anforderung und post danach das was ich bereits gebaut habe.

-- Anforderung--

C.\script.bat <N>
  1. der <N>ist eine zahl.
Lese aus einer Datei <N> Zeilen oder alle Zeilen die kleienr <N> sind aus.
Kopiere die Zeilen in eine weitere Datei. Bei erneuten Ausführen des Scripts soll diese Datei überschrieben werden.
Definiere zwei Variablen.
Var1 = die ersten 12 Zeichen der ersten Zeile aus Datei 2
Var2 = die ersten 12 Zeichen der letzten Zeile aus Datei 2
gebe Var1+Var2 auf der Konsole aus

-- Anforderung Ende --

Hier nun mein bisheriges Bastelwerk

@echo off & setlocal
set "Ein=D:\scripts\liste.txt"
set "Aus=D:\scripts\DatenNeu.txt"
set /a Anzahl=12
set "Delim="
if exist "%Aus%" del "%Aus%"
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ein%"') do set "Zeile=%%j" & call :ProcessFile %%i
goto :eof

:ProcessFile
set /a KeinUmbruch=%1 %% Anzahl
if %KeinUmbruch% gtr 0 (
>>"%Aus%" echo %Zeile%
) else (
>>"%Aus%" echo %Zeile%
>>"%Aus%" echo\
)
goto :eof

Leider tut es nicht was es soll, da es mir alle Zeilen der Datei ausgibt und nicht die angegebenen 12
Bitte nur konstruktive Beiträge und keine Antworten wie: Nehm doch VB oder PS. Beides ist aus Sicherheitsgründen auf dem Zielsystem nicht erlaubt.
Das mit dem Umbruch ist nur zu Testzwecken eingebaut und soll nachher nicht mehr sein. Die extrahierten Zeilen sollen also umgebrochen werden.
Thanks in advance ;)
Mitglied: Skyemugen
10.02.2011 um 08:48 Uhr
Aloha,

nur schnell vor'm Frühstück noch eine Sache, damit man sich's besser ins Gehirn einbrennen kann: Codeformatierung
<code></code> verwenden, das hilft doch sehr beim Betrachten und denken ;)

greetz André
Bitte warten ..
Mitglied: 60730
10.02.2011 um 09:21 Uhr
moin,

umgebastelte Biber erkenn ich doch auf den ersten Blick auch ohne Code Tags...
Da wo du den her hast, war doch bestimmt auch etwas mehr dabei?

leider nicht die nötige zeit mich in die dosshell einzuarbeiten. die lösung muss irgendwie heute auf den tisch.
Bitte nur konstruktive Beiträge und keine Antworten wie:

leider tut es nicht was es soll, da es mir alle Zeilen der Datei ausgibt und nicht die angegebenen 12
  • Der einzige "Aufruf" ist doch in:
set /a Anzahl=12
Das nirgendwo weiter verwurstet ist - das Script ist ja auch für was anderes Gebastelbibert worden.

  • Solange da echo off als erster Befehl drin steht, wirst du auch nie herausfinden, was das Script macht.

Du brauchst auf was ganz anderes, einmal muß im Script %1 ausgewertet werden und dieses %1 muß dann in eine For /l Schleife das eine Findstr /n Schleife und dann ein Echo herausrückt.

Lese aus einer Datei <N> Zeilen oder alle Zeilen die kleienr <N> sind aus.
und wie soll das gesteuert werden, ob n zeilen oder alle Zeilen bis?

Sorry, aber die Zeile heute muß es auf den Tisch und ich hab keine Zeit mich in ein System einzuarbeiten, das es erst seit neunzehnundertpaarundachtzig gibt - da verliere ich die Lust


Hin und wieder kommt es vor, dass ich meinem CHef sage, das geht nicht, oder das kann ich nicht und das ist eine Charakterstärke, keine Schwäche
Kann man denn so eine Frage nicht abends stellen, wenn wir Feierabend haben und nicht dann, wenn wir selber Kohle ranschaffen müssen?


Gruß
Bitte warten ..
Mitglied: Skyemugen
10.02.2011 um 09:45 Uhr
Aloha T-Mo,

umgebastelte Biber erkenn ich doch auf den ersten Blick auch ohne Code Tags...

[OT]Ja, jetzt wo du es sagst ;) - ich guck mir Codes ohne Tags schon gar nicht mehr an, weil mein Gehirn sonst auf Lesemodus statt Skriptmodus springt.
Aber ist doch schön, dass es sein bisheriges Bastelwerk ist *hust* laut seiner Aussage[/OT]

greetz André
Bitte warten ..
Mitglied: 60730
10.02.2011 um 09:50 Uhr
Zitat von Skyemugen:
Aloha T-Mo,

> umgebastelte Biber erkenn ich doch auf den ersten Blick auch ohne Code Tags...

[OT]Ja, jetzt wo du es sagst ;) - ich guck mir Codes ohne Tags schon gar nicht mehr an, weil mein Gehirn sonst auf Lesemodus statt
Skriptmodus springt.
Aber ist doch schön, dass es sein bisheriges Bastelwerk ist *hust* laut seiner Aussage[/OT]

[OT]
u.A Diese und die von mir zitierten Zeilen - auf sowas hab ich wirklich keine Lust - vielleicht kommt nachher Meister Bastla und bringt den gütigen Samariter mit, man weiß es nicht, aber was so ein paar geschriebene und ein paar ungeschriebene Zeilen so ausmachen können - das finde ich sehr interessant.
btw: Wir alle haben ja auch irgendwo das - was wir können gelernt und Fremde Federn bleiben fremde Federn
[/OT]


greetz André

retour
Bitte warten ..
Mitglied: instinctless
10.02.2011 um 09:53 Uhr
Hallo Timo,
du sollst mir ja nicht den code vorkauen sondern mir nur bissel helfen. ich bin durchaus bereit das selbst zu erarbeiten. in der kürze der zeitlichen anforderung würde ich es ohne hilfe aber nicht schaffen.
zu erst einmal, ja ich habe mir codefragmente hier aus dem forum genommen.

das mit %1 leuchtet mir ein. weiss nicht wieso ich das gestern nicht direkt verarbeitet habe, in nem anderen beispiel habe ich bereits damit gearbeitet.
das mit den code tags bitte ich zu entschuldigen.

@andre´ ich nenne es mein bastelwerk (nicht mein code) weil teile des von mir kopierten codes aus dem forum ausgetauscht wurden. ich sehe das nicht als verwerflich.
Bitte warten ..
Mitglied: 60730
10.02.2011 um 10:30 Uhr
Moin,
Zitat von instinctless:
Hallo Timo,
du sollst mir ja nicht den code vorkauen sondern mir nur bissel helfen.

das hört sich doch ganz anders an....

Demo an der Dosbox
for /l %a in (1,1,9) do echo %aTest>>C:\script\demo2\demo2.txt
Damit hat man .- wenn man einen Ordner Script und darin einen Ordner Demo2 hat - eine Datei zum spielen.

Angenommen man will jetzt bis Zeile x alles haben - dann....
Festverdrahtet immer noch in der Dosbux...
for /f "tokens=1,* delims=:" %a in ('findstr /n "." C:\script\demo2\demo2.txt') do if %a leq 2 echo %a %b
Es soll aber nichtfestverdrahtet sein, sondern via %1
- Ich vermute - das kriegst du dann selber hin.
"&&" ist ein Biber oder ein fpschultze?, der für Befehl erfolgreich ausgeführt steht.

01.
if "%1"=="" echo error 
02.
echo %1 |findstr [a-z] && echo nur zahlen erlaubt 
03.
 
04.
for /f "tokens=1,* delims=:" %%a in ('findstr /n "." C:\script\demo2\demo2.txt') do if %%a leq %1 echo %a %b 
05.
 
06.
pause
Ganz ohne Echo off und nur wegen der Abfrage ob und ob nicht - ein mehrzeiler - sonst killefitz...
Zu beachten - hat die Zeile selber ein : mußt du das abfangen - auch das kriegt man ganz einfach hin.

Gruß
Bitte warten ..
Mitglied: bastla
10.02.2011 um 11:44 Uhr
Hallo @All!

Wieder einmal völlig ungetestet (und unter der Annahme, dass es keine anderen Variablen gibt, deren Name mit "Var" beginnt):
01.
@echo off & setlocal 
02.
set "Ein=D:\scripts\liste.txt" 
03.
set "Aus=D:\scripts\DatenNeu.txt" 
04.
set /a AnzahlZeilen=2 
05.
set /a AnzahlZeichen=12 
06.
 
07.
if exist "%Aus%" del "%Aus%" 
08.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ein%"') do if %%i leq %1 (set "Zeile=%%j" & call :ProcessFile %%i) 
09.
for /f "tokens=1* delims==" %%i in ('set Var') do echo %%j 
10.
goto :eof 
11.
 
12.
:ProcessFile 
13.
>>"%Aus%" echo\%Zeile% 
14.
if %1 gtr %AnzahlZeilen% goto :eof 
15.
call set "Var%1=%%Zeile:~,%AnzahlZeichen%%%" 
16.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: instinctless
10.02.2011 um 14:30 Uhr
danke mein held
Bitte warten ..
Mitglied: 60730
10.02.2011 um 15:08 Uhr
Moin
Zitat von instinctless:
danke mein held

Wenns der gütige Bastla mal wieer mit einem ungetesteten echo off Schnippsel geschafft hat - dann kleb doch bitte den grünen Haken an den Fred.

@bastla: Das rafft doch wieder keiner, was du da gezimmert hast Erst als ich dein ungetestetes Schnippselchen angesehen hab, hab ich mir nochmal die Frage genauer angeschaut
Das kommt vom schlechten Kantinenkaffee

Gruß
Bitte warten ..
Mitglied: bastla
10.02.2011 um 16:28 Uhr
@T-Mo

Auf vielfachen Wunsch eine kurze Erklärung (und ich fange gleich in Zeile 8 an):
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ein%"') do
ist ja nicht wirklich neu - es werden einfach alle Zeilen, die einen Zeilenanfang ("^") haben (und damit im Gegensatz zum Suchbegriff "." auch solche, in denen aber schon gar nix steht), nummeriert aufgelistet, wobei die Nummer von der Zeile durch einen ":" getrennt (oder auch "delimited") wird.
Da ja über den Zeileninhalt (ausnahmsweise, kommt hier im Forum ganz selten vor) nix bekannt ist, soll alles, was nach dem ersten ":" folgt, nicht weiter zerlegt werden (könnten ja noch weitere ":" enthalten sein) - deswegen nur die "tokens" 1 (=Nummer) und "*" (=der ganze Rest) erzeugen.
if %%i leq %1
Es soll ja nur eine bestimmte Anzahl von Zeilen (und die wurde als Parameter %1übergeben) in die neue Datei geschrieben werden - daher der Vergleich, ob die aktuelle Zeilennummer noch kleiner / gleich (outlandish: less or equal) der gewünschten Anzahl (ja, steht in %1) ist. Wenn dem so ist, werden die Anweisungen in der folgenden Klammer ausgeführt.
(set "Zeile=%%j" & call :ProcessFile %%i)
Die Zeile steht im zweiten erzeugten "token" (nach %%i ist das %%j) und wird aber (später) in einer eigenen Variablen benötigt und daher %Zeile% zugewiesen. Die weitere Verarbeitung erfolgt dann im Unterprogramm :ProcessFile (das hier besser :ProcessLine heißen sollte). Beim Aufruf dieses Unterprogrammes wird die laufende Nummer als Parameter mitgenommen.
for /f "tokens=1* delims==" %%i in ('set Var') do echo %%j
Wenn dann alles, was zu tun war, für alle Zeilen durch ist, können noch, wie gewünscht, die aus den ersten beiden Zeilen (siehe oben: %AnzahlZeilen%) gewonnen Informationen angezeigt werden - der Einfachheit halber, indem in einer weiteren Schleife die Auflistung aller Variablen, deren Name mit "Var" beginnt - diese erfolgt nach dem Schema
Var1=Wert der Variablen Var1
vorgenommen wird. Da nur die Werte, nicht aber die Variablennamen interessieren (habe ich zumindest angenommen), wird jede Zeile am ersten "=" geteilt und wieder nur der danach folgende Teil ausgegeben.

Damit ist der Job erledigt und das Hauptprogramm kann ein Ende finden:
goto :eof
Da war dann ja aber auch noch das Unterprogramm, das die eigentlich Arbeit erledigt (und daher natürlich als Letztes erwähnt wird ):
>>"%Aus%" echo\%Zeile%
Zuerst einmal die Zeile in die neue Datei schreiben (der "\" - oft wird auch "." verwendet - sorgt dafür, das eine Leerzeile auch als solche in der Datei landet) - zur Erinnerung: Wir sind im Unterprogramm, weil noch nicht die vorgegebene Zeilenanzahl überschritten war und daher in der oberen Schleife der Aufruf erfolgte).
>if %1 gtr %AnzahlZeilen% goto :eof
Falls die Anzahl der Zeilen, für die Variablen erzeugt werden sollten, schon überschritten ist (festzustellen durch den Vergleich der übergebenen Zeilennummer, die hier im Unterprogramm als %1 - nicht zu verwechseln mit dem %1 des Hauptprogrammes - angekommen ist, mit dem in der Variablen %AnzahlZeilen% festgelegten Wert - hier: 2), gibt's nix mehr zu tun, daher Rücksprung (das ist in diesem Fall die Bedeutung des "goto :eof") ins Hauptprogramm.
>call set "Var%1=%%Zeile:~,%AnzahlZeichen%%%"
Da wir immer noch hier sind, handelt es sich bei der aktuellen Zeile offensichtlich um Zeile 1 oder 2, und von denen sollen ja die ersten 12 Zeichen (bzw, so viele, wie in %AnzahlZeichen% festgelegt wurde) in Variablen festgehalten werden. Das Erzeugen des Teilstrings kann nicht unter Verwendung einer Schleifenvariablen (zB %%j) erfolgen, weshalb oben die Zeile in der gleichnamigen Variablen gespeichert wurde. Die neue Variable soll nach der Zeilennummer (steht hier in %1) %Var1% oder %Var2% (usw, wenn es mal mehr Zeilen werden sollten) benannt werden - daher: "set Var%1="

Um aus einer Variablen (%Zeile%) eine variable Anzahl von Zeichen (%AnzahlZeichen%) herausholen zu können, würde entweder "delayedExpansion" benötigt, oder die hier verwendete "call"-Methode - aufgelöst würde dabei nach dem "=" stehen: "%Zeile:~0,12%", womit die ersten 12 Zeichen (es wird am Anfang kein einziges Zeichen übersprungen) aus %Zeile% entnommen werden.

Damit ist's aber dann wirklich genug hier, und daher wieder zurück in das Hauptprogramm ("goto :eof" ist ja jetzt schon ein alter Hut).
Ich hoffe, dass
Das rafft doch wieder keiner
jetzt nicht mehr flächendeckend zutrifft ...

Grüße
bastla
Bitte warten ..
Mitglied: instinctless
14.02.2011 um 09:46 Uhr
hi bastla,
danke für die tolle anleitung.
so ganz steig ich da allerdings immer noch nicht hinter.
ich habe jetzt noch ne zusatzanforderung und zwar sollen die ersten 12 zeichen der ersten sowie die ersten 12 zeichen der letzen zeile hintereinander auf der console ausgegeben werden.
habe da gerade schon etwas rumprobiert aber da kommt leider nichts sinnvolles bei heraus
Bitte warten ..
Mitglied: bastla
14.02.2011 um 11:58 Uhr
Hallo instinctless!

Mit der Änderung sähe das so aus:
01.
@echo off & setlocal 
02.
set "Ein=D:\scripts\liste.txt" 
03.
set "Aus=D:\scripts\DatenNeu.txt" 
04.
set /a AnzahlZeilen=1 
05.
set /a AnzahlZeichen=12 
06.
 
07.
if exist "%Aus%" del "%Aus%" 
08.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ein%"') do if %%i leq %1 (set "Zeile=%%j" & call :ProcessFile %%i) 
09.
for /f "tokens=1* delims==" %%i in ('set Var') do echo %%j 
10.
goto :eof 
11.
 
12.
:ProcessFile 
13.
>>"%Aus%" echo\%Zeile% 
14.
call set "VarLetzte=%%Zeile:~,%AnzahlZeichen%%%" 
15.
if %1 gtr %AnzahlZeilen% goto :eof 
16.
call set "Var%1=%%Zeile:~,%AnzahlZeichen%%%" 
17.
goto :eof
Es wird hier in der zusätzlichen Zeile
call set "VarLetzte=%%Zeile:~,%AnzahlZeichen%%%"
ohne weitere Bedingung der Variablenwert gesetzt, sodass immer (= für alle an das Unterprogramm übergebenen Zeilen) der vorhergehende Wert überschrieben wird - am Ende steht daher der letzte Wert in der "Spezial"-Variablen (nicht mit Zeilennummer versehen).
Ansonsten: Bei Fragen: fragen

Grüße
bastla
Bitte warten ..
Mitglied: instinctless
14.02.2011 um 15:05 Uhr
leider doch noch nicht ganz genau was ich brauche.
die als parameter "N" angegebene zahl soll in einer schleife so lange durchlaufen werden bis eof eintritt.
gibt es in dos so etwas wie

do until eof?
Bitte warten ..
Mitglied: bastla
14.02.2011 um 15:12 Uhr
Hallo instinctless!

Was genau soll dieses mehrfache Durchlaufen bewirken - sollen alle entstehenden "Blöcke" in die "DatenNeu.txt" geschrieben werden (sodass dann genau ein Vielfaches von N an Zeilen darin steht)?

Grüße
bastla
Bitte warten ..
Mitglied: instinctless
14.02.2011 um 15:18 Uhr
Hallo bastla,
nein die Datei DatenNeu.txt soll bei jedem durchlauf überschrieben werden.
<frag mich nicht wozu das gut sein soll>
auf der console sollen dann nacheinander die ausgaben der ersten 12 zeichen von zeile 1 bis zeile N erfolgen, solange bist alle zeilen aus der eingabedatei abgearbeitet sind.
Bitte warten ..
Mitglied: bastla
14.02.2011 um 15:29 Uhr
Hallo instinctless!

Wozu das gut sein soll erschließt sich einem tatsächlich nicht auf Anhieb ...

Es bleibt aber trotzdem noch die Frage offen, was am Ende in der Datei stehen soll, wenn die Zeilenanzahl nicht restlos durch N teilbar ist?
Ich würde übrigens das zwischenzeitliche Schreiben in die Datei vermeiden und nur die entsprechenden Teilzeilen (also für zB N=10 nur die ersten 12 Zeichen der Zeilen 1, 10, 11, 20, etc) ausgeben und dann eben abschließend zB die Zeilen 141 bis 148 in die "DatenNeu.txt" schreiben ...

Grüße
bastla
Bitte warten ..
Mitglied: instinctless
14.02.2011 um 15:33 Uhr
hi bastla,
das würde ich in der tat auch machen, ich habe es auch versucht zu erklären das es so wenig sinn macht. aber das wollten die netten herren nicht hören.
das wegen N mitunter eine nicht teilbare zahl aufkommt ist mir bewusst.
aber ist es dos nicht egal und es fallen dann einfach alle verfügbaren raus und am ende kommt ne err msg sofern man echo an hat?
ich hoffe es sind alle klarheiten beseitigt.
Bitte warten ..
Mitglied: bastla
14.02.2011 um 16:01 Uhr
Hallo instinctless!

Warum sollte eine "err msg" kommen? Es wird doch nur für die vorhandenen Zeilen geprüft, ob sie noch in das "Kontingent" fallen und daher zu schreiben sind - daher: Keine Zeilen mehr - keine Prüfung mehr (und die "endgültige" Datei umfasst dann eben soviele Zeilen, wie noch über waren) ...

"echo on" hat übrigens keinen Einfluss auf die Ausgabe von Fehlermeldungen, sondern legt nur fest, dass die Befehlszeile vor der Ausführung noch angezeigt wird (wobei die Variablen bereits durch ihren Inhalt ersetzt sind und damit der Ablauf besser nachvollziehbar wird, wenn es gerade mal nicht so tut wie soll).
Tatsächlich frage ich mich inzwischen allerdings, ob ich mich an einem Unsinn wie "Schreiben wir im Abstand von Sekunden(bruchteilen) neue Zeilen in immer die selbe Datei, auch wenn nix und niemand die dadurch überschriebenen Inhalte nachvollzieht (nachvollziehen kann)." überhaupt noch beteiligen mag ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
14.02.2011 um 16:15 Uhr
Naja, what shall's:
01.
@echo off & setlocal 
02.
set "Ein=D:\scripts\liste.txt" 
03.
set "Aus=D:\scripts\DatenNeu.txt" 
04.
set /a AnzahlZeichen=12 
05.
 
06.
set "N=%~1" 
07.
if not defined N echo Keine Zeilenanzahl angegeben! & pause & goto :eof 
08.
 
09.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ein%"') do (set "Zeile=%%j" & call :ProcessFile %%i) 
10.
If %Nr% neq 0 ( 
11.
    echo %Erste% 
12.
    echo %Letzte% 
13.
14.
goto :eof 
15.
 
16.
:ProcessFile 
17.
set /a Nr=%1 %% N 
18.
if %Nr%==1 ( 
19.
    del "%Aus%" 2>nul 
20.
    call set "Erste=%%Zeile:~,%AnzahlZeichen%%%" 
21.
22.
call set "Letzte=%%Zeile:~,%AnzahlZeichen%%%" 
23.
if %Nr%==0 ( 
24.
    echo %Erste% 
25.
    echo %Letzte% 
26.
    echo\ 
27.
28.
>>"%Aus%" echo\%Zeile% 
29.
goto :eof
Furchtbar, so verspielt zu sein ...

Grüße
bastla

[Edit] Zeilen 10 bis 13 zur Ausgabe der ersten und letzten Zeile des letzten Blocks noch ergänzt. [/Edit]

[Edit2] In den Zeilen 12 und 25 %Zeile% durch %Letzte% ersetzt. [/Edit2]
Bitte warten ..
Mitglied: instinctless
15.02.2011 um 14:20 Uhr
hi,
leider gibt das script nun nicht mehr das aus was es soll, nämlich 12 zeichen ab ^ sondern die komplette zeile.
ich habe echo %Zeile% durch %Letzte% ersetzt und nun gibt er auch die 12 Zeichen aus, allerdings kommt in beiden fällen ein weitaus größeres problem zum tragen.
in einigen zeilen steht nämlich 'Zugriff verweigert' o0
wie kommt denn sowas zustande? in der einzulesenden textdatei stehen nur zahlen.
Bitte warten ..
Mitglied: bastla
15.02.2011 um 15:14 Uhr
Hallo instinctless!
ich habe echo %Zeile% durch %Letzte% ersetzt und nun gibt er auch die 12 Zeichen aus
Richtige Korrektur (habe ich inzwischen oben auch durchgeführt)
in einigen zeilen steht nämlich 'Zugriff verweigert' o0
wie kommt denn sowas zustande? in der einzulesenden textdatei stehen nur zahlen.
Sorry - kann ich nicht nachvollziehen (ich teste allerdings mit nur wenigen Zeilen auf einem schnellen Speicher) ...

Geht es denn so (mit nur einmaligem Schreiben) besser?
01.
@echo off & setlocal 
02.
set "Ein=D:\scripts\liste.txt" 
03.
set "Aus=D:\scripts\DatenNeu.txt" 
04.
set /a AnzahlZeichen=12 
05.
 
06.
set "N=%~1" 
07.
if not defined N echo Keine Zeilenanzahl angegeben! & pause & goto :eof 
08.
set /a N=N 
09.
if %N% leq 1 echo Keine sinnvolle Zeilenanzahl angegeben! & pause & goto :eof 
10.
 
11.
del "%Aus%" 2>nul 
12.
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ein%"') do (set "Zeile=%%j" & call :ProcessFile %%i) 
13.
 
14.
If %Nr% neq 0 ( 
15.
    echo %Erste% 
16.
    echo %Letzte% 
17.
18.
more +%ToSkip% "%Ein%">"%Aus%" 
19.
goto :eof 
20.
 
21.
:ProcessFile 
22.
set /a Nr=%1 %% N 
23.
if %Nr%==1 ( 
24.
    call set "Erste=%%Zeile:~,%AnzahlZeichen%%%" 
25.
    set /a ToSkip=%1-1 
26.
27.
call set "Letzte=%%Zeile:~,%AnzahlZeichen%%%" 
28.
if %Nr%==0 ( 
29.
    echo %Erste% 
30.
    echo %Letzte% 
31.
    echo\ 
32.
33.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: instinctless
15.02.2011 um 15:29 Uhr
die testdaten wurden per copy/paste aus excel in notepad kopiert?
möglich das da was mit dem encoding nicht hinaut bzw. unsichtbare chars zwischen hängen?
das wäre für mich die derzeit einzige erklärung.

die letzte version läuft aber bislang ohne fehler.
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung!

(1)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Linux
gelöst URL und Username aus HTML-Datei extrahieren - sed, grep (4)

Frage von plutowitsch zum Thema Linux ...

Batch & Shell
gelöst Dos-Box, seltsame(s) Zeichen - Was und woher? (6)

Frage von Franz-Josef-II zum Thema Batch & Shell ...

Perl
gelöst Mit Perl aus einer Datei teilidentische Zeilen löschen (5)

Frage von Jeduja zum Thema Perl ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (10)

Frage von 1410640014 zum Thema Backup ...