mikrocontroller.net

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


Autor: Bettler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bettler schrieb:
> Habe ich mich verständlich ausgedrückt

nein.

Evtl.:

ren %lesen% %brauche%.csv

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
set lesen=113_Zinsen_von_gestern-heute.2001-2010.csv

for /F "tokens=1 delims=." %%i in ("%lesen%") do set eins=%%i
for /F "tokens=2 delims=." %%i in ("%lesen%") do set zwei=%%i
for /F "tokens=3 delims=." %%i in ("%lesen%") do set drei=%%i


echo %eins%
echo %zwei%
echo %drei%

set dateiname=%zwei%.%drei%

echo %dateiname%

Autor: Bettler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bettler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Bettler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bettler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.