Forum: PC-Programmierung Datei um n Stellen kürzen mittels batch


von Bettler (Gast)


Lesenswert?

Hallo,


ich möchte mittels batch folgende Datei kürzen und auch speichern.
Die Datei liegt auf D:\temp

113_Zinsen_von_gestern-heute.2001-2010.csv

Ich habe die´s hier versucht und komme nicht weiter.
Brauche den teil 2001-2010.csv

set lesen=113_Zinsen_von_gestern-heute.2001-2010.csv

for /F "tokens=1 delims=." %%i in ("%lesen%") do set frei=%%i
for /F "tokens=2 delims=." %%j in ("%lesen%") do set brauche=%%j

und bekomme dann set brauche=2001-2010


1. Was mache ich nun mit der Variable 2001-2010? Umleiten wie?
2. Warum ist das .csv hinten weg?
3. Wie kann ich alle Dateien in D:\temp auf einmal abarbeiten?

Habe ich mich verständlich ausgedrückt als nicht batch versteher.
Ich wäre dankbar für eure Hilfe.


MfG Bettler

von Klaus W. (mfgkw)


Lesenswert?

Bettler schrieb:
> Habe ich mich verständlich ausgedrückt

nein.

Evtl.:

ren %lesen% %brauche%.csv

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bettler schrieb:
> ich möchte mittels batch folgende Datei kürzen und auch speichern.

Du willst nicht die Datei kürzen. Du willst ihren Namen verändern.

Probier mal das hier aus:
1
set lesen=113_Zinsen_von_gestern-heute.2001-2010.csv
2
3
for /F "tokens=1 delims=." %%i in ("%lesen%") do set eins=%%i
4
for /F "tokens=2 delims=." %%i in ("%lesen%") do set zwei=%%i
5
for /F "tokens=3 delims=." %%i in ("%lesen%") do set drei=%%i
6
7
8
echo %eins%
9
echo %zwei%
10
echo %drei%
11
12
set dateiname=%zwei%.%drei%
13
14
echo %dateiname%

von Bettler (Gast)


Lesenswert?

einfach nur g*** schön.

Habt mir beide super geholfen.

Habe den Code von @rufus und noch dran den Code von @Klaus genommen und 
ich bin sowas von zufrieden. (erstmal)

Bei diesem Beispiel habe ich ja die Variable "lesen" vorgegeben.
Was ist aber wenn ich nen ganze Menge solcher Daten habe (D:\temp\} die 
immer auf .2001-2010.csv änden?

Ich habe irgendwo was gelesen von ("dir /p") oder so. Aber was mache ich 
damit in meiner batch? Es soll ja auch möglich sein die Zeichen von 
links oder rechts zu zählen.


Vielleicht gibt es noch einmal einen Rat von euch.

Danke Bettler

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Nun, das Beispiel von mir zerlegt den Dateinamen in drei Teile - Du 
kannst den ersten Teil ("eins" oder bei Dir "frei") mit einem 
vorgegebenen String vergleichen.

Bei aufwendigeren Stringoperationen erscheint mir die Verwendung einer 
leistungsfähigeren Skriptsprache angesagt; Windows versteht auch 
VBScript.

von Klaus W. (mfgkw)


Lesenswert?

Bettler schrieb:
> Was ist aber wenn ich nen ganze Menge solcher Daten habe (D:\temp\} die
> immer auf .2001-2010.csv änden?

Dann kann man um das Ganze noch eine for-Schleife bauen, die
alle Dateien abgrast.
Darin wird je Durchlauf eine Datei angefasst.

Es macht natürlich keinen Sinn, die alle auf denselben
Namen .2001-2010.csv zu ändern; sonst gehen ja alle
bis auf die letzte verloren.
Keine Ahnung, wie du sie dann benamsen willst.
Wenn der erste Teil des Originalnamens (im Beispiel die 113)
eindeutig ist, kannst du den ja analog zu den anderen Token
extrahieren und dafür verwenden.

von Bettler (Gast)


Lesenswert?

Hallo zusammen,

es sollen folgende Dateien die unter D:\temp\ liegen so verändert werden 
das alles was rechts vom ersten Punkt steht der neue Dateiname sein 
soll.

113_Zinsen_von_gestern-heute.2001-2010.csv > 2001-2010.csv
119_Zinsen_seit_gestern-heute.2051-2017.csv > 2051-2017.csv
112_Irgendwas_von_gestern-morgen.1071-7010.csv > 1071-7010.csv
usw......


In einer for Schleife ist denke ich das richtige. Habe nun schon einige 
Zeit im Inet gesucht aber kann mir auf das ganze Zeug keinen rechten 
Reim machen.


MfG Bettler

von Klaus W. (mfgkw)


Lesenswert?


von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bettler schrieb:
> es sollen folgende Dateien die unter D:\temp\ liegen so verändert werden
> das alles was rechts vom ersten Punkt steht der neue Dateiname sein
> soll.

Wenn sichergestellt ist, daß das, was rechts des ersten Punktes steht, 
eineindeutig ist, dann funktioniert dein bisheriger Code.

Wenn aber Namen wie

113_Zinsen_von_gestern-heute.2001-2010.csv
219_Zinsen_seit_gestern-heute.2001-2010.csv

auftreten, dann geht das ganze nicht. Wie sollen dann die Dateien 
umbenannt werden?

von Bettler (Gast)


Lesenswert?

Mm,


ok habe mich noch einmal mit jemanden unterhalten der mir diese Aufgabe 
aufgegeben hat.
Nun anders.Von dieser

113_Zinsen_von_gestern-heute.2001-2010.csv

soll bleiben

113_Zinsen_von_gestern.csv

Habe ich nun gemacht mit

for %f in (_.csv) do for /F "delims=-" %e in ('echo %~f') d
o @echo move /y "%~f" "%e%~xf"

So 100% sicher was es alles macht bin ich mir nicht aber es macht das 
was es soll. (Ich muß zugeben ich habe das ganze in div. Foren 
gefunden.)

Nun noch, wie kopiere ich das in ein anderes Verzeichnis? Move gegen 
copy ersetzen klappt nicht.

MfG Bettler

von Bettler (Gast)


Lesenswert?

So, dies ist nun mein Ergebnis um von
113_Zinsen_von_gestern-heute.2001-2010.csv
nach
113_Zinsen_von_gestern.csv
zu gelangen

for %%f in ("D:\temp\batch_test\*_*.csv") do for /F "delims=-" %%e in 
('echo %%~f') do move /y "%%~f" "%%e%%~xf"

copy /y *csv d:\temp\batch_test\eins

Falls es noch Bemerkungen dazu geben sollte, dann lese ich sie mir gerne 
durch.

MfG Bettler

von Klaus W. (mfgkw)


Lesenswert?

Wobei move meines Wissens kein Standardkommando unter
Windows ist, kann aber auch sein daß ich mich täusche
(ist nicht so mein Metier, und habe jetzt auch keine Lust Windows
zu starten).
Falls es so ist: ren (für rename) geht dann und ist auf jedem
Windows vorhanden.

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.