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

Bestimmte zeilen aus batchdatei speichern

Frage Entwicklung Batch & Shell

Mitglied: Roadrunner777

Roadrunner777 (Level 1) - Jetzt verbinden

13.10.2010, aktualisiert 07:13 Uhr, 3786 Aufrufe, 17 Kommentare

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
Mitglied: bastla
13.10.2010 um 10:12 Uhr
Hallo Roadrunner777 und willkommen im Forum!

Schematisch könnte das so aussehen:
01.
@echo off & setlocal 
02.
set "Liste=D:\Liste.txt" 
03.
 
04.
set "Ordner=" 
05.
for /f "usebackq delims=" %%i in ("%Liste%") do call :ProcessLine "%%i" 
06.
goto :eof 
07.
 
08.
:ProcessLine 
09.
echo %~1|findstr /b "[">nul || goto :Kopieren 
10.
for /f "delims=[]" %%o in (%1) do set "Ordner=%%o" 
11.
echo md "%Ordner%" 
12.
goto :eof 
13.
 
14.
:Kopieren 
15.
echo Kopiere %1 in Ordner "%Ordner%" 
16.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Roadrunner777
13.10.2010 um 10:39 Uhr
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
Bitte warten ..
Mitglied: 60730
13.10.2010 um 10:51 Uhr
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 .

01.
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
Du hast da schon ein zwei Zeilen mehr geschrieben, da wäre doch Geiz (sparen) der falsche Weg
/edit
Bitte warten ..
Mitglied: bastla
13.10.2010 um 10:57 Uhr
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 ... [/Edit]
Bitte warten ..
Mitglied: Roadrunner777
13.10.2010 um 11:42 Uhr
net alle auf einmal

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
Bitte warten ..
Mitglied: 60730
13.10.2010 um 12:30 Uhr
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
Bitte warten ..
Mitglied: Roadrunner777
13.10.2010 um 12:43 Uhr
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 chcp steht bei mir 850,... was sagt mir das jetzt?
Bitte warten ..
Mitglied: Roadrunner777
13.10.2010 um 13:09 Uhr
01.
set "cd=cds\manual.ini" 
02.
 
03.
set "FOLDER=" 
04.
for /f "usebackq delims=" %%i in ("%cd%") do call :ProcessLine "%%i" 
05.
goto :eof 
06.
 
07.
:ProcessLine 
08.
echo %~1|findstr /b "[">nul || goto :lister 
09.
for /f "delims=[]" %%o in (%1) do set "FOLDER=%%o" 
10.
echo md "%FOLDER%" 
11.
goto :eof 
12.
 
13.
:lister 
14.
call snreader %1 %FOLDER% 
15.
echo Kopiere %1 in ordner "%FOLDER%" 
16.
goto :eof 
17.
 
18.
 
19.
:snreader 
20.
set "Ordner=" 
21.
for /f "usebackq delims=" %%i in ("data\%~1\cd-info.txt") do call :ProcessLine2 "%%i" 
22.
goto :eof 
23.
 
24.
:ProcessLine2 
25.
echo %~1|findstr /b "[">nul || goto :copy 
26.
for /f "delims=[]" %%o in (%1) do set "Ordner=%%o" 
27.
echo md "%Ordner%" 
28.
goto :eof 
29.
 
30.
:copy 
31.
echo Kopiere %1 in Ordner "%~2/%Ordner%" 
32.
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)
Bitte warten ..
Mitglied: 60730
13.10.2010 um 13:19 Uhr
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.
Bitte warten ..
Mitglied: Roadrunner777
13.10.2010 um 13:49 Uhr
ok mein vorhaben, nochmal langsam

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
01.
[geräte] 
02.
03.
04.
 
05.
[software] 
06.
07.
7

unterinformationsdatei (von gerät 1)
01.
[firmware] 
02.
03.
 
04.
[anleitungen] 
05.
06.
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
Bitte warten ..
Mitglied: 60730
13.10.2010 um 14:30 Uhr
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 Roadrunner777:
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.
Ohne Rems blickst du bei fortgeschrittenem gebastlabasisierenden Scripten ganz schnell nix mehr.

PS.: was ist mit chcp gemeint???
ok 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
Bitte warten ..
Mitglied: Roadrunner777
13.10.2010 um 14:55 Uhr
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* :/
Bitte warten ..
Mitglied: 60730
13.10.2010 um 15:08 Uhr
[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]
Bitte warten ..
Mitglied: Roadrunner777
13.10.2010 um 15:30 Uhr
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

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
Bitte warten ..
Mitglied: Roadrunner777
13.10.2010 um 19:52 Uhr
ob die lösung jetzt sauber ist oder nicht, kann ich nicht beurteilen,... aber es funktioniert soweit

hier mal der aktuelle code:
01.
@echo off 
02.
chcp 1252  
03.
mode 53,15 
04.
cls 
05.
echo. 
06.
ECHO   ************************************************* 
07.
ECHO   * 1 = Bedinungsanleitungs CD                    * 
08.
ECHO   * 2 = cd                                        * 
09.
ECHO   * 3 = cd                                        * 
10.
ECHO   * 4 = cd                                        * 
11.
echo   *                                               * 
12.
Echo   * B = Beenden                                   * 
13.
ECHO   ************************************************* 
14.
echo. 
15.
choice 	/C:1234B /N 
16.
 
17.
if errorlevel 5 goto end 
18.
if errorlevel 4 goto cd 
19.
if errorlevel 3 goto cd 
20.
if errorlevel 2 goto cd 
21.
if errorlevel 1 goto manual 
22.
 
23.
 
24.
:manual 
25.
 
26.
		set "cd=manual.ini" 
27.
 
28.
		set "folder=" 
29.
		for /f "usebackq delims=" %%i in ("%cd%") do call :ProcessLine "%%i" 
30.
		goto :eof 
31.
 
32.
		:ProcessLine 
33.
		echo %~1|findstr /b "[">nul || goto :Kopieren 
34.
		for /f "delims=[]" %%o in (%1) do set "folder=%%o" 
35.
		::echo md "%folder%" 
36.
 
37.
		md cd\%folder% 
38.
 
39.
		goto :eof 
40.
 
41.
		:Kopieren 
42.
		::echo Kopiere %1 in ord "%folder%" 
43.
		set idn=%~1 
44.
 
45.
		md cd\%folder%\%idn% 
46.
 
47.
 
48.
				set "data=data\%idn%\cd-info.txt" 
49.
 
50.
				set "dat=" 
51.
				for /f "usebackq delims=" %%i in ("%data%") do call :ProcessLineI "%%i" 
52.
				goto :eof 
53.
 
54.
				:ProcessLineI 
55.
				echo %~1|findstr /b "[">nul || goto :copy 
56.
				for /f "delims=[]" %%o in (%1) do set "dat=%%o" 
57.
				::echo md "%dat%" 
58.
				md cd\%folder%\%idn%\%dat% 
59.
				goto :eof 
60.
 
61.
				:copy 
62.
				::echo Kopiere %1 in ord "%folder%/%idn%/%dat%" 
63.
				echo copy "data\%idn%\%~1.*" "cd\%folder%\%idn%\%dat%\%~1.*" 
64.
				copy "data\%idn%\%~1.*" "cd\%folder%\%idn%\%dat%\%~1.*" 
65.
 
66.
				goto :eof 
67.
 
68.
 
69.
 
70.
FOR /F "delims=" %i in ('dir /b /s /ad "C:\img\cd"') do rd "%i" 2>NUL 
71.
pause 
72.
 
73.
 
74.
goto end 
75.
 
76.
:cd 
77.
echo cd 
78.
pause 
79.
goto end 
80.
 
81.
 
82.
:end 
83.
 
jetzt macht er alle kopien,... ich hab auch schonmal eine zeile kredentzt die mit die überflüssigen (leeren erstellten) ordner löscht,...

zeile 70:
01.
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
Bitte warten ..
Mitglied: bastla
13.10.2010 um 20:01 Uhr
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) ...
Bitte warten ..
Mitglied: Roadrunner777
14.10.2010 um 06:45 Uhr
Danke!!!
hab alles hinbekommen
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...