Datei um n Stellen kürzen mittels batch

Gast #1884991
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
Persönliche Seite #1885010
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%
Gast #1885756
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
#1885951
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.
Gast #1886371
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
Persönliche Seite #1886440
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?
Gast #1886740
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
Gast #1886912
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
#1886948
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren