94451
Goto Top

Bestimmte zeilen aus batchdatei speichern

Hallo Ihr, ich bin neu hier und kommen mit den gegebenen informationen leider nicht sehr weit,... ich bin anfänger in diesen gebiet,... und hoffe auf eure hilfe,...
ich möchte gerne aus Textdateien bestimmte informationen rausholen und listen,...

mein letztendliches projekt wird so aussehen,...
ich hab ne Haupttextdatei in der stehen (vorerst) drei überpunkte:
[PUNKT1]
0001000
0001010
0001020

[PUNKT2]
0002000
0002010

[PUNKT3]
0003000


jeder überpunkt beschreibt einen ordner (diese Punkte heißen nicht PUNKT sondern z.B. Software), wenn ich fertig bin möchte ich gerne nen ordner anlegen also PUNKT1 und dann kopiere ich die daten aus dem ordner H:\0001000 dann dem ordner H:\0001010 und dann 0001020 dannn gibts wieder nen neuen überordner mit PUNKT2 usw...

ich hab schon einige ansätze:

set "cd=cds\manual.ini"

...

hier kann ich die 1. Zeile auslesen:

findstr /N /B /L /C:"[device]" "%cd%"
set "device="
FOR /F "delims=:" %%i in ('findstr /N /B /L /C:"[device]" "%cd%"') do set cdline=%%i
FOR /F "skip=%cdline% delims=" %%i in ('type "%cd%"') do if not defined device set device=%%i
%device%

...

hier kann ich alle zeilen zählen:

Set /A "Counter=0"
FOR /F "delims=" %%A IN (%cd%) DO SET /A "Counter+=1"
echo %Counter% Zeilen


...

hier kann ich alle zeilen auflisten:

for /f %%i in (%cd%) do (
echo %%i
)


aber wie kann ich sagen

liste mit von [PUNKT1] (exclusive) bis (und da bin ich variabel, was einfacher ist) z.B. eod (für: end od data) oder einfach bis zum nächsten [PUNKT],...
PS.: wieviele unterpunkte ich habe ist unbekannt (möglich sogar das es leer ist)

Danke für eure hilfe

Content-Key: 152899

Url: https://administrator.de/contentid/152899

Printed on: April 24, 2024 at 03:04 o'clock

Member: bastla
bastla Oct 13, 2010 at 08:12:28 (UTC)
Goto Top
Hallo Roadrunner777 und willkommen im Forum!

Schematisch könnte das so aussehen:
@echo off & setlocal
set "Liste=D:\Liste.txt"  

set "Ordner="  
for /f "usebackq delims=" %%i in ("%Liste%") do call :ProcessLine "%%i"  
goto :eof

:ProcessLine
echo %~1|findstr /b "[">nul || goto :Kopieren  
for /f "delims=[]" %%o in (%1) do set "Ordner=%%o"  
echo md "%Ordner%"  
goto :eof

:Kopieren
echo Kopiere %1 in Ordner "%Ordner%"  
goto :eof
Grüße
bastla
Mitglied: 94451
94451 Oct 13, 2010 at 08:39:06 (UTC)
Goto Top
cool Danke,...

gehört jetzt nicht ganz hier rein,... aber ich brauchs für dieses projekt,...
kann ich auch batchdateien mit parameter starten???

also das ich z.B. im cmd eingeben ablauf.bat /parameter

und wie kann ich dann den parameter einlesen?

%parameter_vom_start%

Danke

Grüße Roadrunner
Mitglied: 60730
60730 Oct 13, 2010 at 08:51:01 (UTC)
Goto Top
Moin,

schau dir Zeile 5 und Zeile vom Bastla an.

Zeile 5 Startet "etwas" mit %i, das in Zeile 9 als %1 angenommen wird.

Oder andersherum

ablauf.bat /parameter
Bitte nicht bat - das ist eine cmd .

echo %1 %2 %3 %4
starte den schnippsel mal mit
schnippsel hallo otto hallo echo

Gruß


edit:
@ Bastla: Ich und was sagen, in einem Fred in deiner Bastelstube? Ich werde mich
hüten face-wink
Du hast da schon ein zwei Zeilen mehr geschrieben, da wäre doch Geiz (sparen) der falsche Weg face-wink
/edit
Member: bastla
bastla Oct 13, 2010 at 08:57:03 (UTC)
Goto Top
Hallo Roadrunner777!

Im Batch oben verhält sich das Unterprogramm ":ProcessLine" wie ein eigener Batch - dort siehst Du dann auch gleich die Möglichkeit der Parameterübergabe.

Der aufgerufene Batch erhält die Parameter als %1, %2, ... %9, wobei mit der Schreibweise %~1 umgebende Anführungszeichen (die erforderlich sind, wenn der Parameter zB Leerzeichen enthält) entfernt werden können.

Grüße
bastla

[Edit] @t-mo: Sag' doch was, dann hätte ich mir das Ganze ersparen können ... face-wink [/Edit]
Mitglied: 94451
94451 Oct 13, 2010 at 09:42:00 (UTC)
Goto Top
net alle auf einmal face-smile

ich werds mal antesten,...

warum cmd und nicht bat???

ich hab nen bat to exe konverter,... damit kann ichs dann kompilieren und gut is,... cmd to exe hab ich nix verfügbar

(hab ich dadurch irgendwelche nachteile?)

Grüßle

/edit
noch ne frage,... wie mach ich das ich umlaute ausgeben/lesen/schreiben kann???
aufgeschnappt hab ich
set chars=„ ” � á

aber das funktioniert nicht
Mitglied: 60730
60730 Oct 13, 2010 at 10:30:01 (UTC)
Goto Top
warum cmd und nicht bat???

Weil Bastla dir einige Befehle gezeigt hat, die nur cmd kann, landet diese datei mal auf einer asbaschuraltkiste . weiß die das Sie damit nix anfangen kann.
bat to exe konverter,... damit kann ichs dann kompilieren und gut is
*püh*
das ist alles andere als gut oder sicher oder was auch immer.
kompilier die mal, lass Sie laufen und schau in dein Temp Verzeichnis.

Gruß

edit
chcp
/edit
Mitglied: 94451
94451 Oct 13, 2010 at 10:43:22 (UTC)
Goto Top
kompilier die mal, lass Sie laufen und schau in dein Temp Verzeichnis.

hm wie kann ich dann meine datei davor schützen das nicht jeder was verändern kann???

ich will mit der datei letztendlich ne cd erstellen,... also mit imgburn mach ich letztendlich ne iso,... meine kollegen sollen auf der isoerstellung keinen einfluss haben, nur so kann ich gewährleisten das die cd auch so ok ist,...
ich möchte gerne eine cd machen die sich jeden tag ändern kann,...
was gibts für alternativen als kompilieren???

Gruß

PS.: was ist mit chcp gemeint???

/edit
ok face-smile chcp steht bei mir 850,... was sagt mir das jetzt?
Mitglied: 94451
94451 Oct 13, 2010 at 11:09:02 (UTC)
Goto Top
set "cd=cds\manual.ini"  

set "FOLDER="  
for /f "usebackq delims=" %%i in ("%cd%") do call :ProcessLine "%%i"  
goto :eof

:ProcessLine
echo %~1|findstr /b "[">nul || goto :lister  
for /f "delims=[]" %%o in (%1) do set "FOLDER=%%o"  
echo md "%FOLDER%"  
goto :eof

:lister
call snreader %1 %FOLDER%
echo Kopiere %1 in ordner "%FOLDER%"  
goto :eof


:snreader
set "Ordner="  
for /f "usebackq delims=" %%i in ("data\%~1\cd-info.txt") do call :ProcessLine2 "%%i"  
goto :eof

:ProcessLine2
echo %~1|findstr /b "[">nul || goto :copy  
for /f "delims=[]" %%o in (%1) do set "Ordner=%%o"  
echo md "%Ordner%"  
goto :eof

:copy
echo Kopiere %1 in Ordner "%~2/%Ordner%"  
goto :eof 

hier mal mein aktueller code,... irgendwie hab ich mich da aber jetzt verschachtelt,...

mein ziel ist es,... aus einer haput textdatei (edit: Haupt-Textdatei) nummern auszulesen, wie oben schon erklärt,... das funktioniert auch so weit,...
die nummer führt mich zu einem verzeichniss,... ich schreibt dann nur noch das laufwerk davor und hab dann schon da wo ich hinwill,...

z.B. ich lese aus
[geräte]
0001000
0001010

[software]
0002000
0002010


zuerst soll er mir nen ordner anlegen mit geräte dann schaut er in das verzeichniss H:\0001000\ dort ist eine cd-info.txt in der steht dann:
[firmware]
3N_V81

[anleitung]
BA_3N
BA_3N_menue

jetzt gibt es im verzeichniss H:\0001000\ z.B. das firmwareverzeichniss und von dort soll er dann die 3N_V81 kopieren (einfach copy 3N_V81.* nach cd_ort\geräte\firmware\3N_V81.*)

die frage ist nur wie bekomm ich die verschachtelte entschlüsselung hin,...

...
ganz unten steht dann :eof und schließt die datei,... wie kann ich es machen dann dann weiter programm kommt (aber erst wenn er fertig ist,...)
dann kommt nämlich noch mein ISO zeuch,... und zuletzt soll er den ordner den er sich zusammengestellt hat wieder löschen (sobald die iso gemacht ist)
Mitglied: 60730
60730 Oct 13, 2010 at 11:19:31 (UTC)
Goto Top
mal ganz laaaangssssam ala Rudi the rednose cant ride bicycles Scharping...

Eine haput datei hört sich doch kaputt an - wir haben alle Zeit der Welt - nutze Sie.
wie kann ich es machen dann dann weiter programm kommt (aber erst wenn er fertig ist,...)
Du bist doch keine 12 und kannst bestimmt auch deutschlicher schreiben, das ordentliche Schreiben gehört bei jeder Sprache (batch; deutsch) zur grundvoraussetzung.

Was ist : copy bzw: wie kommt der denn da hin? garnicht.
Mitglied: 94451
94451 Oct 13, 2010 at 11:49:29 (UTC)
Goto Top
ok mein vorhaben, nochmal langsam face-smile

batchdatei greift zu auf hauptinformationsdatei
in der steht welche ordner behandelt werden müssen
in jedem ordner steht ne unterinformationsdatei die dann sagt was auf die cd kommt und wohers kommt,...

hauptinformationsdatei
[geräte]
1
2

[software]
5
7


unterinformationsdatei (von gerät 1)
[firmware]
1

[anleitungen]
1
2


jetzt fängt das BATCH an und erstellt erstmal nen ordner (geräte) dann nen ordner 1 (für gerät 1) dann geht er in gerät 1 (nicht der erstellte ordner sondern der hauptbezugsordner) schaut in die unterinfodatei erstellt (in diesen fall) einen firmware ordner, kopiert firmware 1.* und einen anleitungen ordner und kopiert anleitung 1.* und anleitung 2.* (.* deshalb weil es mal eine doc, eine pdf, eine hex, eine exe,... sein könnte,...)

und das eben alles automatisiert,... nur die haupt- und unterinformationsdateien dateien ändern sich ständig (somit sollte sich die cd zusammenstellung auch ändern,...

für die v2 wäre angedacht (wenns leicht is lass ichs auch gleich mit einfließen)
1. das er noch ne logdatei anlegt in der steht was er gemacht hat
2. das ne versionsnummer vorgegeben wird und das immer wenn es eine änderung in der logdatei gibt (z.B. logdatei 11.10.2010 (mit der versionsnummer 1.01 steht firmware 3A_v15 und in der logdatei von heute steht firmware 3A_v16) wird die versionsnummer um 1 erhöht (1.02) die versionsnummer wird dann im dateinnamen der cd stehen (manual_%version%.iso) und natürlich in der logdatei,...

Danke

/edit
die ergebene struktur aus den informationsdateien würde dann so aussehen:

cdordner/manual_1.02.iso/geräte/1/firmware/1.*
cdordner/manual_1.02.iso/geräte/1/anleitungen/1.*
cdordner/manual_1.02.iso/geräte/1/anleitungen/2.*
cdordner/manual_1.02.iso/geräte/2/unterinformationsdatei nicht gefunden
cdordner/manual_1.02.iso/software/5/unterinformationsdatei nicht gefunden
cdordner/manual_1.02.iso/software/7/unterinformationsdatei nicht gefunden
Mitglied: 60730
60730 Oct 13, 2010 at 12:30:27 (UTC)
Goto Top
ok,

das ist wirklich zu abstrakt und ich verstehe den Weg nicht.

Ich nehme an:

  • ein Team pflegt diese ganzen Ordner mit Anleitungen bla bla gedöhns.
  • ein anderer / oder die gleichen pflegen die Haupt/neben Datei(en)
  • du willst dann diese zusätzlich gepflegte Datei auslesen um ein Iso zu bruzzeln?

Das wäre mir zu kompliziert. Ich vermuteanhand oben genannter Skizze für das Ziel gibt es einen Weg mit viel weniger Steinen.
5 Mark ins Schweinderl mit der Brille? [Ja] [Nein]

edit:
Zitat von @94451:
hm wie kann ich dann meine datei davor schützen das nicht jeder was verändern kann???
  • NTFS nur lese Rechte?
  • Schreibschutz
  • liegt auf einem Share auf den nur du kommst.

was gibts für alternativen als kompilieren???
Naja -ehrlich deine Fragen sind eher auf Basiseinstieg, ich rate dir erstmal - nutze Rems, was glaubst du hab ich bei mir schon gezimmert und kann mich 5 Jahre später nicht mehr erinnern, warum ich "irgendwas" so krumm gebaut habe - stell das auf "easy" um und merke - upps der komplizierte Weg umschift einige Hügel, die keiner braucht. face-wink
Ohne Rems blickst du bei fortgeschrittenem gebastlabasisierenden Scripten ganz schnell nix mehr.

PS.: was ist mit chcp gemeint???
ok face-smile chcp steht bei mir 850,... was sagt mir das jetzt?
Das du mal chcp 1252 probieren könntest, wenn du ein Umlautproblem hast.

Mit aller Zeit der Welt meinte ich - schreib deine Frage in einem Editor deiner Wahl, verschwende ein Blatt Papier und einen Kaffee und wenn du das 3 * gelesen hast - poste es hier, alle xx minuten ein Edit und Nachtrag ist grausam
Mitglied: 94451
94451 Oct 13, 2010 at 12:55:06 (UTC)
Goto Top
Das wäre mir zu kompliziert. Ich vermuteanhand oben genannter Skizze für das Ziel gibt es einen
Weg mit viel weniger Steinen.
sicher???
es wird von ca. 5000 artikeln überall eine beschreibung geben,... (direkt im artikelordner) die besagt das wenn der artikel angewählt wird brauch ich z.b. die anleitung die software,....

es gibt 50 cd variationen,... da schreib ich dann nur noch rein was ich für artikel brauch,...
ich kann etwas php programmieren und webdesignsprachen,... bat hatte ich früher noch einiges an doskenntnissen im kopf,... das ist aber auch schon alles,...
da wir ne lösung brauchen scheint mir das wohl am einfachsten,...

5 Mark ins Schweinderl mit der Brille? [Ja] [Nein]

sorry *tschegg ich net* :/
Mitglied: 60730
60730 Oct 13, 2010 at 13:08:16 (UTC)
Goto Top
[OT]
sicher???
sicher - denn alleine deine Frage mit den Umlauten in Kombination CD / ISO bruzzeln, oder kann doc oder PDF sein...
...zeigt mir, als alten Hasen- der Robert Lembke noch kennt - bei euch ist eine große Portion Optimierungsbedarf.

Da würde ich ansetzen.
[/OT]
Mitglied: 94451
94451 Oct 13, 2010 at 13:30:31 (UTC)
Goto Top
ok nehmen wir an ich würde alles umwerfen,...

Da würde ich ansetzen.

die Frage ist wie??? ich hab mir ein konzept überlegt, und obendrein einz wo ich mit rumfragen chancen habe das erwünschte ziel zu erreichen,...

bisher waren mädels unterwegs die die dateien manuel zusammen gesucht haben face-smile

bei euch ist eine große Portion Optimierungsbedarf.

Optimierung ist bei mir ein immer Willkomenes Wort,...


... trotzdem,... solange keine bessere lösung bekannt ist, ist auch das Problem aktuell,...

das Umlautproblem ist nicht schlimm,... (lediglich ein Formfehler, der nicht zwangsweiße mir diesen Problem zu tun hat,... auch chcp 1252 hilft leider nicht)

was spricht gegen doc oder PDF,... die verschidenen formate haben verschidene zwecke,... pdf is zum lesen,... doc könnten für den vertrieb veränderbare dokumente sein (mit word2003 unterstützung,...)

Grüßle
Mitglied: 94451
94451 Oct 13, 2010 at 17:52:30 (UTC)
Goto Top
ob die lösung jetzt sauber ist oder nicht, kann ich nicht beurteilen,... aber es funktioniert soweit face-smile

hier mal der aktuelle code:
@echo off
chcp 1252 
mode 53,15
cls
echo.
ECHO   *************************************************
ECHO   * 1 = Bedinungsanleitungs CD                    *
ECHO   * 2 = cd                                        *
ECHO   * 3 = cd                                        *
ECHO   * 4 = cd                                        *
echo   *                                               *
Echo   * B = Beenden                                   *
ECHO   *************************************************
echo.
choice 	/C:1234B /N

if errorlevel 5 goto end
if errorlevel 4 goto cd
if errorlevel 3 goto cd
if errorlevel 2 goto cd
if errorlevel 1 goto manual


:manual

		set "cd=manual.ini"  

		set "folder="  
		for /f "usebackq delims=" %%i in ("%cd%") do call :ProcessLine "%%i"  
		goto :eof

		:ProcessLine
		echo %~1|findstr /b "[">nul || goto :Kopieren  
		for /f "delims=[]" %%o in (%1) do set "folder=%%o"  
		::echo md "%folder%"  

		md cd\%folder%

		goto :eof

		:Kopieren
		::echo Kopiere %1 in ord "%folder%"  
		set idn=%~1

		md cd\%folder%\%idn%


				set "data=data\%idn%\cd-info.txt"  

				set "dat="  
				for /f "usebackq delims=" %%i in ("%data%") do call :ProcessLineI "%%i"  
				goto :eof

				:ProcessLineI
				echo %~1|findstr /b "[">nul || goto :copy  
				for /f "delims=[]" %%o in (%1) do set "dat=%%o"  
				::echo md "%dat%"  
				md cd\%folder%\%idn%\%dat%
				goto :eof

				:copy
				::echo Kopiere %1 in ord "%folder%/%idn%/%dat%"  
				echo copy "data\%idn%\%~1.*" "cd\%folder%\%idn%\%dat%\%~1.*"  
				copy "data\%idn%\%~1.*" "cd\%folder%\%idn%\%dat%\%~1.*"  

				goto :eof



FOR /F "delims=" %i in ('dir /b /s /ad "C:\img\cd"') do rd "%i" 2>NUL  
pause


goto end

:cd
echo cd
pause
goto end


:end

jetzt macht er alle kopien,... ich hab auch schonmal eine zeile kredentzt die mit die überflüssigen (leeren erstellten) ordner löscht,...

zeile 70:
FOR /F "delims=" %i in ('dir /b /s /ad "C:\img\cd"') do rd "%i" 2>NUL  

doch leider ist es so das er nach :eof die datei beendet und nicht mehr weiter macht,... wenn ich das eof wechmache, macht er nicht automatisch weiter,... hat da jemand einen tipp für mich wie ich das lösen kann? ich möchte gerne noch einiges mehr da reinpacken,... aber das geht natürlich nur, wenn ich weitermachen kann,...

Danke im Vorraus
Member: bastla
bastla Oct 13, 2010 at 18:01:16 (UTC)
Goto Top
Hallo Roadrunner777!

Der Batch endet (bei Auswahl 1) in Zeile 30 - daher wären die Zeilen 70, 71 und was sonst noch knapp vor dem Ende zu erledigen wäre, zwischen den Zeilen 29 und 30 einzufügen.

Grüße
bastla

P.S.: Die Zeile 7 könnte ein zusätzliches "e" vertragen (lässt sich vielleicht gegen eines der "r" bei "Vorraus" eintauschen) ... face-wink
Mitglied: 94451
94451 Oct 14, 2010 at 04:45:50 (UTC)
Goto Top
Danke!!!
hab alles hinbekommen face-smile