Forum: PC-Programmierung string mit batch zerlegen


von dadii (Gast)


Lesenswert?

Hallo
ich möchte jeder txt dateinamen von einem ordner lesen, die namen 
zerlegen und in einem txt. datei schreiben.
ich habe versucht mit batch zu schreiben.aber irgend wie geht nicht
1
FOR %%I IN (*.txt) DO (    
2
3
  echo  %%I >> list.txt 
4
  
5
set VAR= %%I:~3,4 
6
echo VAR 
7
)

Eine Dateiname sieht so aus : AD20101212.txt
davon möchte ich nur 2010 raus ziehen und in einen anderen Pfad 
schreiben wie
D\test\2010 und diese Pfad in einem txt datei schreiben.
es wäre super,wenn jemand mir helfen kann..

von M. M. (karlkappe)


Lesenswert?

Also ein paar mehr Details waere hilfreich.
Ich nehme mal an Du willst einfach alle Dateinamen in ein File 
schreiben.
Dann sollte sowas schon funktionieren ganz ohne script zumindest bei 
Linux.
1
ls *2010*.txt >> file_list.txt

von miks (Gast)


Lesenswert?

helo dadii

ein batch einzeiler kann reizvoll sein, aber
batch subroutine ist flexibler.



(set ZZ_INDIR=C:\tmp)
(set ZZ_LOGFILE=c:\tmp\1\list.log)

if exist %ZZ_LOGFILE%   del /Q %ZZ_LOGFILE%

rem    *  alles eine zeile   *  
FOR  /f  "tokens=*" %%I IN (' dir /b "%ZZ_INDIR%\*.txt" ') DO call 
:get-filename "%%I"
rem    *  alles eine zeile   *  
pause
(goto :EOF)



:get-filename
  (set VAR=%*)
  (set VAR=%VAR:~3,4%)
  echo %VAR% >> %ZZ_LOGFILE%
(goto :EOF)

von dadii (Gast)


Lesenswert?

miks schrieb:
> helo dadii
>
> ein batch einzeiler kann reizvoll sein, aber
> batch subroutine ist flexibler.
>
>
>
> (set ZZ_INDIR=C:\tmp)
> (set ZZ_LOGFILE=c:\tmp\1\list.log)
>
> if exist %ZZ_LOGFILE%   del /Q %ZZ_LOGFILE%
>
> rem    *  alles eine zeile   *
> FOR  /f  "tokens=*" %%I IN (' dir /b "%ZZ_INDIR%\*.txt" ') DO call
> :get-filename "%%I"
> rem    *  alles eine zeile   *
> pause
> (goto :EOF)
>
>
>
> :get-filename
>   (set VAR=%*)
>   (set VAR=%VAR:~3,4%)
>   echo %VAR% >> %ZZ_LOGFILE%
> (goto :EOF)

Vielen Dank erst mal..
Ich habe das probiert halbwegs macht das,was ich möchte.Nun die neue 
Pfad (Z.b D\test\2010) muss in einem cfg datei geschreiben werden.cfg 
datei sieht so aus:
Source: ...
Quelle:....
Pfad: \test\2010(Genaue hier muss neue Pfad geschrieben werden)
danke..

von miks (Gast)


Lesenswert?

helo dadii


>Vielen Dank erst mal..
>Ich habe das probiert halbwegs macht das,was ich möchte.Nun die neue
>Pfad (Z.b D\test\2010) muss in einem cfg datei geschreiben werden.cfg
>datei sieht so aus:
>Source: ...
>Quelle:....
>Pfad: \test\2010(Genaue hier muss neue Pfad geschrieben werden)
>danke..

das ist etwas wirr...

eine bessere beschreibung ist nötig.

von dadii (Gast)


Lesenswert?

hallo miks
ich versuche noch deutliche erklären,was ich möchte:)
Ich habe viel txt dateien in einem Ordner (D:\textdateien),die so 
heißen:
AD20101212.txt
AD20111213.txt
 ....
usw.
davon möchte ich nur den Zahl rausziehen, die ab 3.Stelle bis zum 6. 
Stelle liegt.(z.B. 2010, 2011..usw.)
Mit diesen Zahlen möchte ich jedes mal einen Pfad erstellen.Nehmen wir 
die erste,also 2010 dann wird es
D\test\2010 oder
für 2011
D\test\2010  usw.

Schließlich möchte ich den Pfad,was ich neue erstellt habe  in einem cfg 
(D\test\cfg)datei schreiben.
meine cfg datei sieht so aus:
......
Source:D\test\2010
Quelle:....
........

Durch batch erzeugte Pfad jedes mal im cfg neben den Source 
überschrieben werden.
Also für nächste Schleife muss so aussehen Source:D\test\2011...usw.

Damit  meine C-Code jedes mal  andere source datei in cfg lesen und 
damit laufen kann.


Vielen herzllichen Dank !!!

von DirkB (Gast)


Lesenswert?

Der Teil mit der cfg Datei ist noch etwas wirr.

Das ganze spielt sich in dem Teil ab:
1
:get-filename
2
  (set VAR=%*)
3
  (set VAR=%VAR:~3,4%)
4
  echo %VAR% >> %ZZ_LOGFILE%
5
(goto :EOF)

da steht in VAR deine gesuchte Zahl und statt des echo ... schreibst du 
dann
1
md D:\test\%VAR%
2
echo Source:D\test\%VAR% > D:\test\%VAR%\cfg
3
echo "Quelle:..." >> D:\test\%VAR%\cfg
 oder ähnlich.

Wobei Quelle und Source von der Bedeutung ja das gleiche sind.

von dadii (Gast)


Lesenswert?

DirkB schrieb:

> echo Source:D\test\%VAR% > D:\test\%VAR%\cfg

was ich hier nicht verstehe,
wird die neue Pfad ( md D:\test\%VAR% ) wirklich in einem cgf 
geschiereben?
oder macht er da
>echo Source:D\test\%VAR% > D:\test\%VAR%\cfg
ein neue pfad, die z.B.  D:\test\2011\cfg aussieht,wird erzeugt ?

Das Programm soll eigentlich nur im cfg datei durch
> md D:\test\%VAR%
erzeaugte Pfad schreiben, nicht neue Pfad mit dem Name  D:\test\2011\cfg
erzeugen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.