Batch um Dateien in Unterordnern umzubenennen
Hallo zusammen
Ich hab folgendes Problem:
Ich habe mehrere Ordner mit Subfolder welche *.ok - Dateien drin haben.
Ich brauche, um in Access mit diesen Dateien zu arbeiten sie aber als *.txt.
Ich krieg das mit dem Umbennen mitsamt den Dateien in den Unterordner leider nocht nicht so ganz hin. Mein bisheriger Ansatz:
for /r "D:\WORK\Rechnungstool\Daten" %i in (*.ok) do @echo rename %i %~ni.txt
Habe mir gedacht, wäre evtl. einfacher, wenn ich zuerst alle *.ok-Dateien aus den Ordnern/Unterordnern rauskopiere und danach in einem Verzeichnis alle umbenenne mit demselben Batch.
Habt ihr eine Idee wie ich das mache? Bin Batch-technisch nicht so fit.
Wäre super wenn mir jemand dabei helfen könnte!
Lieber Gruss
Tobias
[Edit Biber] Den beliebten Verschreiber "umzubennen" im Titel hab ich mal "umbannt". [/Edit]
Ich hab folgendes Problem:
Ich habe mehrere Ordner mit Subfolder welche *.ok - Dateien drin haben.
Ich brauche, um in Access mit diesen Dateien zu arbeiten sie aber als *.txt.
Ich krieg das mit dem Umbennen mitsamt den Dateien in den Unterordner leider nocht nicht so ganz hin. Mein bisheriger Ansatz:
for /r "D:\WORK\Rechnungstool\Daten" %i in (*.ok) do @echo rename %i %~ni.txt
Habe mir gedacht, wäre evtl. einfacher, wenn ich zuerst alle *.ok-Dateien aus den Ordnern/Unterordnern rauskopiere und danach in einem Verzeichnis alle umbenenne mit demselben Batch.
Habt ihr eine Idee wie ich das mache? Bin Batch-technisch nicht so fit.
Wäre super wenn mir jemand dabei helfen könnte!
Lieber Gruss
Tobias
[Edit Biber] Den beliebten Verschreiber "umzubennen" im Titel hab ich mal "umbannt". [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 73961
Url: https://administrator.de/contentid/73961
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
28 Kommentare
Neuester Kommentar
Moin tob1as,
aber auch Dein geposteter Ansatz klappt bei Pfad/Dateiangaben mit Leerzeichen im Namen,
wenn Du die Zählvariable %i in Anführungszeichen setzt.
[Demo]
Ob es für Access später mal sinnvoller ist, diese Dateien in EINEM Ordner zu haben, ist eine andere Sache.
Wenn es so ist, dann brauchst Du tatsächlich noch eine zweite Anweisung (MOVE "%i" x:\Accesssfiles\").
In einem Schritt kannst Du nicht ein MOVE und ein REN durchziehen.
Grüße
Biber
aber auch Dein geposteter Ansatz klappt bei Pfad/Dateiangaben mit Leerzeichen im Namen,
wenn Du die Zählvariable %i in Anführungszeichen setzt.
[Demo]
for /r "c:\dokumente und Einstellungen" %i in (*.txt) do @ECHO rename "%i" "%~ni.bla"
Ob es für Access später mal sinnvoller ist, diese Dateien in EINEM Ordner zu haben, ist eine andere Sache.
Wenn es so ist, dann brauchst Du tatsächlich noch eine zweite Anweisung (MOVE "%i" x:\Accesssfiles\").
In einem Schritt kannst Du nicht ein MOVE und ein REN durchziehen.
Grüße
Biber
@Biber
ausreichen (wenn es den Zielordner schon gibt) - oder steh' ich gerade ganz daneben?
Grüße
bastla
In einem Schritt kannst Du nicht ein MOVE und ein REN durchziehen.
Eigentlich sollte doch einmove "D:\WORK\Rechnungstool\Daten\Test.ok" "D:\WORK\Sammel\Test.txt"
Grüße
bastla
Jepp, bastla,
Du hast Recht.
Mit Wildcards ginge es nicht, wohl aber mit explizitem Namen:
Also dann doch im einem Rutsch.
Grüße
Biber
Du hast Recht.
Mit Wildcards ginge es nicht, wohl aber mit explizitem Namen:
>move xxxtest.xxx d:\work\*.yyy
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
### geht nicht.
###
>move xxxtest.xxx d:\work\xxxtest.yyy
### Dat geiht.
Also dann doch im einem Rutsch.
Grüße
Biber
@tob1as
Rückfrage:
Ist Deine Frage beantwortet, gibt es neue Probleme, bist Du schon im Weihnachtsstress...?
Grüße
Biber
Rückfrage:
Ist Deine Frage beantwortet, gibt es neue Probleme, bist Du schon im Weihnachtsstress...?
Grüße
Biber
Moin tob1as,
Aber der Ersatz-Befehl ist nur unwesentlich länger:
a) vom CMD-Prompt
b) im Batch - zwei Prozentzeichen vor den Zählvariablen.
Hilfe zu FOR /D (D=Director's Cut) unter "For /?" am Cmd-Prompt.
Grüße
Biber
Sorry hatte sehr viel um die Ohren letzte Woche, ...
Und ich sach' noch: Lass Dich von diesem Weihnachtsrummel verrückt machen...*gg...und zu diesem Problem kamen noch 20000 andere dazu.
Hab ich nicht schon eine Million Mal gesagt, ihr sollt nicht so übertreiben?move "D:\WORK\Rechnungstool\BatchFiles\*\*.OK" ..{anywhere}..
Okay, an dieser Stelle sind keine Wildcards erlaubt.Aber der Ersatz-Befehl ist nur unwesentlich länger:
a) vom CMD-Prompt
for /D %i in ("D:\WORK\Rechnungstool\BatchFiles\*") do Move "%i\*.OK" ...{anywhere}
b) im Batch - zwei Prozentzeichen vor den Zählvariablen.
for /D %%i in ("D:\WORK\Rechnungstool\BatchFiles\*") do Move "%%i\*.OK" ...{anywhere}
Hilfe zu FOR /D (D=Director's Cut) unter "For /?" am Cmd-Prompt.
Grüße
Biber
Moin Tob1as,
da hatte ich die Struktur falsch verstanden.
Wenn Dein Beispiel "D:\WORK\Rechnungstool\BatchFiles\2007\01" heißt, dass in 01, 02, 03... die *.OK-Dateien sind, dann:
Upps, JETZT versteh ich ,glaube ich...
Du hast
D:\WORK\Rechnungstool\BatchFiles\2007
D:\WORK\Rechnungstool\BatchFiles\2008
D:\WORK\Rechnungstool\BatchFiles\2009
und darunter jeweils ...01, 02, 03....
Dann imBatch
Oder einfach mit FOR /R Rekursiv:
Grüße
Biber
da hatte ich die Struktur falsch verstanden.
Wenn Dein Beispiel "D:\WORK\Rechnungstool\BatchFiles\2007\01" heißt, dass in 01, 02, 03... die *.OK-Dateien sind, dann:
for /D %i in ("D:\WORK\Rechnungstool\BatchFiles\2007\*") do Move "%i\*.OK" ...{anywhere}
Du hast
D:\WORK\Rechnungstool\BatchFiles\2007
D:\WORK\Rechnungstool\BatchFiles\2008
D:\WORK\Rechnungstool\BatchFiles\2009
und darunter jeweils ...01, 02, 03....
Dann imBatch
for /D %%i in ("D:\WORK\Rechnungstool\BatchFiles\2007\*") do (
for /D %%j in ("%%i\*") do Move "%%i\%%~nxj\*.OK" ...
)
for /R "D:\WORK\Rechnungstool\BatchFiles" %%i in ("*.OK") do move %%i {anywhere}
Deine Geduld ist umwerfend...
Mehrere Ex-Schwiegermütter im Lauf der Zeit, das trainiert...Grüße
Biber
Moin tob1as,
copy & paste diese Zeile..
...vom Cmd-Prompt aus und poste das Ergebnis, FALLS ES NICHT STIMMT.
Ich denke, Du hast nur ein überzähliges Anführungszeichen in Deiner Batch-Zeile.
Grüße
Biber
copy & paste diese Zeile..
for /R "D:\WORK\Rechnungstool\BatchFiles" %i in ("*.OK") do @Echo move %i D:\WORK\Rechnungstool\Test.txt
Ich denke, Du hast nur ein überzähliges Anführungszeichen in Deiner Batch-Zeile.
Grüße
Biber
Hallo tob1as!
Nur zur Sicherheit: Willst Du alle *.OK als Ergebnis in einer großen "D:\WORK\Rechnungstool\BatchFiles\Test.txt"-Datei? Wenn ja, dann etwa so:
Falls aber alle Dateien in einem gemeinsamen Ordner (als Einzeldateien) sollen, müsstest Du beachten, dass bereits vorhandene gleichnamige Dateien durch die später verschobenen überschrieben werden - insoferne wäre eine Namenskonvention, etwa durch Voranstellen von zB "2007_11_" vor den Dateinamen, zu überlegen.
Grüße
bastla
Nur zur Sicherheit: Willst Du alle *.OK als Ergebnis in einer großen "D:\WORK\Rechnungstool\BatchFiles\Test.txt"-Datei? Wenn ja, dann etwa so:
for /R "D:\WORK\Rechnungstool\BatchFiles" %i in ("*.OK") do type "%i">>"D:\WORK\Rechnungstool\BatchFiles\Test.txt"
Grüße
bastla
Moin tob1as,
Das von bastla verwendete Special "echo.>>whereEver.xyz", also ein "Echo" direkt gefolgt von wahlweise einem "." oder "\" oder "?" ermöglicht es, nur ein CRLF/einen Zeilenvorschub/eine leere Zeile zu posten.
Siehst Du ganz oft bei geECHOted Batchmenüs, die aus ästhetischen Gründen ein paar Leerzeilen beeinhalten.
Beispiel:
Da dieses Zeichen dirkt nach "echo" NICHT mit ausgegeben wird, kann es auch nicht am Ende Deiner Datei ankommen.
Grüße
Biber
mein nächstes Problem kommt bestimmt bald
Jederzeit wieder gerne... dass wir auch diese Kuh vom Eis bekommen haben, lag ja auch mit an Deiner Mitarbeit und Deinem Feedback.So schreibt die Batch am Ende des Files immer noch einen Punkt.
Das kann eigentlich nur dann passieren, wenn zwischen "echo" und dem "." ein Leerzeichen steht.Das von bastla verwendete Special "echo.>>whereEver.xyz", also ein "Echo" direkt gefolgt von wahlweise einem "." oder "\" oder "?" ermöglicht es, nur ein CRLF/einen Zeilenvorschub/eine leere Zeile zu posten.
Siehst Du ganz oft bei geECHOted Batchmenüs, die aus ästhetischen Gründen ein paar Leerzeilen beeinhalten.
Beispiel:
....
echo Menü
echo.
echo.
echo Auswahl A
echo.
echo Auswahl B
....
Da dieses Zeichen dirkt nach "echo" NICHT mit ausgegeben wird, kann es auch nicht am Ende Deiner Datei ankommen.
Grüße
Biber
Moin tob1as,
Aber wenn Du so einen kleinen grünen Haken oben am Thread anbringen könntest,
das wäre schon mehr, als ich normalerweise von einem Montagmorgen erwarte....
Grüße zurück
Biber
Wenn du nicht so weit weg wohnen würdest, würde ich heute Abend mit dir ein paar Bier trinken
Na ja, Bier oder Fussball nach Bremen tragen, wo es Becks und Werder gibt... das ist nett gemeint, aber eigentlich nicht nötig... Aber wenn Du so einen kleinen grünen Haken oben am Thread anbringen könntest,
das wäre schon mehr, als ich normalerweise von einem Montagmorgen erwarte....
Grüße zurück
Biber
Moin tob1as,
ich bin nicht sicher, ob ich das Problem richtig verstehe, bzw. wasa so kompliziert daran ist.
Falls ich es richtig verstanden habe, wäre die Situation sinngemäß so, wie ich sie hier nachgebildet habe:
...und den 4.Fall, also das Unterverzeichnis "Gebuehren-2003-02", welches nicht direkt unter dem Pfad liegt,
in dem "normalerweise" die "Gebuehren-2007-xx\*.Ok-Dateien liegen, den willst Du NICHT haben?
Das wäre doch dann nur:
Oder habe ich jetzt die Verzeichnisstruktur missverstanden?
Grüße
Biber
ich bin nicht sicher, ob ich das Problem richtig verstehe, bzw. wasa so kompliziert daran ist.
Falls ich es richtig verstanden habe, wäre die Situation sinngemäß so, wie ich sie hier nachgebildet habe:
>dir /b /s *.ok
D:\temp\test\Gebuehren-2007-01\22140.ok
D:\temp\test\Gebuehren-2007-02\10406.ok
D:\temp\test\Gebuehren-2007-03\24201.ok
D:\temp\test\gj2003\Gebuehren-2003-02\10984.ok
in dem "normalerweise" die "Gebuehren-2007-xx\*.Ok-Dateien liegen, den willst Du NICHT haben?
Das wäre doch dann nur:
>set pfad=d:\temp\test
### erst die bisherige Zeile von oben:
>for /R "%pfad%" %i in ("*.OK") do @echo %~pi|find /i "GEBUEHREN-"
\temp\test\Gebuehren-2007-01\
\temp\test\Gebuehren-2007-02\
\temp\test\Gebuehren-2007-03\
\temp\test\gj2003\Gebuehren-2003-02\
## die Variable %~pi (nur Pfad) auf %~dpi (Lw+Pfad) oder %i (ganzer Pfad/Dateiname) erweitern.
>for /R "%pfad%" %i in ("*.OK") do @echo %~dpi|find /i "%pfad%\GEBUEHREN-"
d:\temp\test\Gebuehren-2007-01\
d:\temp\test\Gebuehren-2007-02\
d:\temp\test\Gebuehren-2007-03\
## und %pfad% muss unmittelbar vor "GEBUEHREN-...." stehen.
## Dann werden nur die drei statt vier Verzeichnisse angezeigt/angezogen.
Oder habe ich jetzt die Verzeichnisstruktur missverstanden?
Grüße
Biber
Moin tob1as,
vielleicht habe ich mich missverständlich ausgedrück...das Testen, das ich gestern am CMD-Prompt gemacht habe, sollte nicht 1:1 in die Batch.
Wenn schon, dann:
...statt der 5 Zeilen, vordie ich sicherheitshalber eine Kommentar-Marke gesetzt habe.
Grüße
Biber
vielleicht habe ich mich missverständlich ausgedrück...das Testen, das ich gestern am CMD-Prompt gemacht habe, sollte nicht 1:1 in die Batch.
Wenn schon, dann:
....
for /R "%Pfad%" %%i in ("*.OK") do @echo %%~dpi|find /i "%Pfad%\GEBUEHREN-">nul && type "%%i">>"%File%"
...
...
REM for /R "%Pfad%" %%i in ("*.OK") do @echo %%~dpi|find /i "%Pfad%\GEBUEHREN-"
REM J:\PROJECTS\Gebuehren-2007-01\
REM J:\PROJECTS\Gebuehren-2007-02\
REM J:\PROJECTS\Gebuehren-2007-03\
REM J:\PROJECTS\Geschaeftsjahr-2005\Gebuehren-2003-02\
REM && type "%%i">>"%File%"
Grüße
Biber
Moin tob1as,
es geht jetzt durcheinander mit CMD-Prompt/Batchversion und Testen/Echteinsatz.
Für Batch (alle Zählvariablen wie z.B %i) mit ZWEI"%%"-Prozentzeichen schreiben.
DIESE EINE FOLGENDE ZEILE sollte in Deine Batchdatei ANSTATT der 5 oder 6 Zeilen, die Deine FOR-Anweisung jetzt lang ist.
Mehr erstmal nicht, dann sehen wir weiter,
Grüße
Biber
es geht jetzt durcheinander mit CMD-Prompt/Batchversion und Testen/Echteinsatz.
Für Batch (alle Zählvariablen wie z.B %i) mit ZWEI"%%"-Prozentzeichen schreiben.
DIESE EINE FOLGENDE ZEILE sollte in Deine Batchdatei ANSTATT der 5 oder 6 Zeilen, die Deine FOR-Anweisung jetzt lang ist.
....
for /R "%Pfad%" %%i in ("*.OK") do @echo %%~dpi|find /i "%Pfad%\GEBUEHREN-">nul && type "%%i">>"%File%"
...
Mehr erstmal nicht, dann sehen wir weiter,
Grüße
Biber