Batch-Dateien: Unterverzeichnisse auslesen und Dateien umbenennen
Hallo Zusammen,
ich habe mich hier schon umgesehen, aber eine Loesung fuer mein Problem leider nicht gefunden...
Daher ein neuer Beitrag.
Also ich hab folgende Verzeichnisstruktur auf einem Server:
x:\Projektunterlagen\Projekt1\mitarbeiter1_0702.xls
x:\Projektunterlagen\Projekt1\mitarbeiter2_0702.xls
x:\Projektunterlagen\Projekt1\mitarbeiter3_0702.xls
...
x:\Projektunterlagen\Projekt2\mitarbeiter1_0702.xls
x:\Projektunterlagen\Projekt2\mitarbeiter2_0702.xls
...
so geht das immer weiter.
Jetzt habe ich ein Batchscript geschrieben, welches mir von dem lok. PC gemaess obigem Muster z.B. von C:\Projektunterlagen\* alles mit der selben Struktur nach x:\Projektunterlagen\* kopiert.
Allerdings sind die Dateien auf dem lok. PC maskiert(?) wie folgt:
mitarbeiter3_JJMM.xls
Mein Script kopiert somit die maskierten Dateien auf den Server.
Jetzt habe ich zwar eine Idee, da ich alledings ein Anfaenger in Sachen Batch-Dateien bin, keine Idee wie ich es geloest gekomme.
Ich hab mir folgendes ausgedacht.
a) ich benenne die Dateien beim kopieren um.
vllt mit FIND JJMM und REPLACE(?)
b) ich lese nach dem kopieren alle Dateien aus den Unterverzeichnissen aus und benenne sie dann um.
Hoffe ich hab das einigermassen verstaendlich erklaert und hoffe mir kann jmd helfen...
ich habe mich hier schon umgesehen, aber eine Loesung fuer mein Problem leider nicht gefunden...
Daher ein neuer Beitrag.
Also ich hab folgende Verzeichnisstruktur auf einem Server:
x:\Projektunterlagen\Projekt1\mitarbeiter1_0702.xls
x:\Projektunterlagen\Projekt1\mitarbeiter2_0702.xls
x:\Projektunterlagen\Projekt1\mitarbeiter3_0702.xls
...
x:\Projektunterlagen\Projekt2\mitarbeiter1_0702.xls
x:\Projektunterlagen\Projekt2\mitarbeiter2_0702.xls
...
so geht das immer weiter.
Jetzt habe ich ein Batchscript geschrieben, welches mir von dem lok. PC gemaess obigem Muster z.B. von C:\Projektunterlagen\* alles mit der selben Struktur nach x:\Projektunterlagen\* kopiert.
Allerdings sind die Dateien auf dem lok. PC maskiert(?) wie folgt:
mitarbeiter3_JJMM.xls
Mein Script kopiert somit die maskierten Dateien auf den Server.
Jetzt habe ich zwar eine Idee, da ich alledings ein Anfaenger in Sachen Batch-Dateien bin, keine Idee wie ich es geloest gekomme.
Ich hab mir folgendes ausgedacht.
a) ich benenne die Dateien beim kopieren um.
vllt mit FIND JJMM und REPLACE(?)
b) ich lese nach dem kopieren alle Dateien aus den Unterverzeichnissen aus und benenne sie dann um.
Hoffe ich hab das einigermassen verstaendlich erklaert und hoffe mir kann jmd helfen...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 51784
Url: https://administrator.de/contentid/51784
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
19 Kommentare
Neuester Kommentar
Moin besenwesen,
willkommen im Forum.
Rückfragen:
Bzw. Frage: Wo leitest Du die Projektzugehörigkeit ab?
Bitte noch mal langsam erklären für ältere Mitbiber wie mich.
Danke
Biber
willkommen im Forum.
Rückfragen:
x:\Projektunterlagen\Projekt1\mitarbeiter1_0702.xls
Ist "mitarbeiter1_0702.xls" ein Verzeichnisname oder ein Dateiname?mitarbeiter3_JJMM.xls
Und soll jetzt die konkrete lokale Datei "c:\.....Projektunterlagen\mitarbeiter1_0702.xls" in das Verzeichnis X:\...\ProjektEINS\"... oder ins "X:\...ProjektZWEI"?Bzw. Frage: Wo leitest Du die Projektzugehörigkeit ab?
Bitte noch mal langsam erklären für ältere Mitbiber wie mich.
Danke
Biber
Okay.... wenn ich jetzt als richtig verstanden habe, dann existiert unterhalb des %quellverzeichnis% keine weitere Struktur, sondern nur noch Dateien.
Dann könnte der zweite Teil Deines Batchs so ausklingen:
HTH
Biber
Dann könnte der zweite Teil Deines Batchs so ausklingen:
...
REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
REM Pruefen ob Ziel-Verzeichnis existiert
If not exist "%zielverzeichnis%" MKDIR "%zielverzeichnis%"
REM z.B.D:\Projektunterlagen\resourcenplanung\02_Rapportzettel_%datum%
ECHO.
ECHO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ECHO Kopiere alles von
ECHO %quellverzeichnis%
ECHO nach
ECHO %zielverzeichnis%
ECHO ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ECHO.
REM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
REM Kopieren / works
XCOPY "%quellverzeichnis%" "%zielverzeichnis%" /s
PushD "Zielverzeichnis%
For /f "delims=_ tokens=1-2" %%i in ('dir /b /a-d *_????.xls ) do Ren "%%i_%%j.xls" "%%i.xls"
POPD
HTH
Biber
Moin besenwesen,
wir tasten uns da schon ran, keine Sorge...
Dann lass uns bitte erst am CMD-Prompt weiterprobieren, bis wir das gewünschte Ergebnis erhalten.
Am CMD-Prompt (im %Zielverzeichnis%) bitte:
Strategie der zwei FOR-Anweisungen:
- die linke nimmt den vollständugen Dateinamen
- die rechte zerlegt nur den Dateinamen nach dem ersten "_".
Wenn sich da nichts ändert im Ergebnis, poste doch mal die ersten 5 Zeilen einer "Dir /s /b *_????.xls"-Ausgabe.
Dann ist es einfacher.
Gruss
Biber
wir tasten uns da schon ran, keine Sorge...
Dann lass uns bitte erst am CMD-Prompt weiterprobieren, bis wir das gewünschte Ergebnis erhalten.
Am CMD-Prompt (im %Zielverzeichnis%) bitte:
For /f "delims=" %b in ('dir /b /s /a-d *_????.xls) do For /f "delims=_ tokens=1*" %i in ("%~nb" ) do @echo TestRename "%~dpb\%i_%j" "%i.xls"
Strategie der zwei FOR-Anweisungen:
- die linke nimmt den vollständugen Dateinamen
- die rechte zerlegt nur den Dateinamen nach dem ersten "_".
Wenn sich da nichts ändert im Ergebnis, poste doch mal die ersten 5 Zeilen einer "Dir /s /b *_????.xls"-Ausgabe.
Dann ist es einfacher.
Gruss
Biber
Moin Besenwesen,
okay, dann haben wir es jetzt...
Wenn ich als Ternnzeichen das "-" einbaue und die zwei Tippfehler aus meinem letzten Kommantar-Schnipsel verbessere sollte an CMD-Prompt folgendes das gewünschte Ergebnis liefern:
Wenn ja, dann wäre die entsprechende Anweisung im Batch diese:
Gruss
Biber
okay, dann haben wir es jetzt...
Wenn ich als Ternnzeichen das "-" einbaue und die zwei Tippfehler aus meinem letzten Kommantar-Schnipsel verbessere sollte an CMD-Prompt folgendes das gewünschte Ergebnis liefern:
For /f "delims=" %b in ('dir /b /s /a-d *_????.xls') do For /f "delims=- tokens=1*" %i in ("%~nxb" ) do @echo TestRename "%~dpb\%i_%j" "%i.xls"
Wenn ja, dann wäre die entsprechende Anweisung im Batch diese:
For /f "delims=" %%b in ('dir /b /s /a-d *_????.xls') do (
For /f "delims=- tokens=1*" %%i in ("%%~nxb" ) do Rename "%%~dpb\%%i_%%j" "%%i.xls"
)
Gruss
Biber
Naja, besenwesen,
dann ist es kein Batchproblem, sondern ein Kommunikationsproblem.
Also: ich war (fälschlicherweise, wie es aussieht) davon ausgegangen, dass die ganze Dateinamens-Prosa nach dem ersten Delimiter "-" entsorgt wird.
In Deinem Beispiel also aus "ma-MA-ASAB-JJMM.xls" wird: "ma.xls".
Aber jetzt gehe ich davon aus, dass aus "ma-MA-ASAB-JJMM.xls" werden soll: "ma-MA-ASAB.xls". Korrekt?
Dann ist in der Tat ein "tokens 1-4" richtig, allerdings sollte dem auch in der DIR-Dateimaske Rechnung getragen werden.
Dann im Batch (zum Testen
Gruss Biber
dann ist es kein Batchproblem, sondern ein Kommunikationsproblem.
Also: ich war (fälschlicherweise, wie es aussieht) davon ausgegangen, dass die ganze Dateinamens-Prosa nach dem ersten Delimiter "-" entsorgt wird.
In Deinem Beispiel also aus "ma-MA-ASAB-JJMM.xls" wird: "ma.xls".
Aber jetzt gehe ich davon aus, dass aus "ma-MA-ASAB-JJMM.xls" werden soll: "ma-MA-ASAB.xls". Korrekt?
Dann ist in der Tat ein "tokens 1-4" richtig, allerdings sollte dem auch in der DIR-Dateimaske Rechnung getragen werden.
Dann im Batch (zum Testen
For /f "delims=" %%b in ('dir /b /s /a-d ??-??-????-????.xls') do (
For /f "delims=- tokens=1-4*" %%i in ("%%~nxb" ) do echo NEU: %%i-%%j-%%k.xls
Echo Rename "%%~dpb\%%i-%%j-%%k-%%l" "%%i-%%j-%%k.xls"
)
Gruss Biber
Na, dann passt es doch (fast)....
Wenn Du also irgendwo diese "0703" aus dem "davor" stehenden Pfad herauslesen willst.. das bekämen wir hin.
Aber dann hast Du doch die JJ/MM-Information doch wieder doppelt, oder?
Das steht doch schon im Ober-Ober-Pfad?
Aber egal, wenn jetzt diese JJMM-Info in einer Variable %JJMM% stünde, dann:
Wo soll denn jetzt diese JJMM-Info her kommen? Redundant aus dem "\..._2007_03\" im Ablage-Pfad?
Gruss
Biber
Wenn Du also irgendwo diese "0703" aus dem "davor" stehenden Pfad herauslesen willst.. das bekämen wir hin.
Aber dann hast Du doch die JJ/MM-Information doch wieder doppelt, oder?
\..._2007_03\SAP4F&ITNB\ma
\..._2007_03\Sap4fmc\ma
\..._2007_03\SAP4IM\ma
\..._2007_03\Sap4tsbs\ma
\..._2007_03\Sap4fmc\ma
\..._2007_03\SAP4IM\ma
\..._2007_03\Sap4tsbs\ma
Das steht doch schon im Ober-Ober-Pfad?
Aber egal, wenn jetzt diese JJMM-Info in einer Variable %JJMM% stünde, dann:
.... Echo Rename "%%~dpb\%%i-%%j-%%k-%%l" "%%i-%%j-%%k-%JJMM%.xls"
Wo soll denn jetzt diese JJMM-Info her kommen? Redundant aus dem "\..._2007_03\" im Ablage-Pfad?
Gruss
Biber