[Batch] Dateien in Ordner kopieren, welcher mit Dateinamen beginnt

daheym

Grünschnabel
Hallo,

ich weiß nicht ob es die Überschrift so 100%ig trifft, daher noch mal die Problemstellung etwas ausführlicher :)

Ich habe ein Programm welches mir regalmäßig Dateien im Format XXXX_irgendeinDateiname.pdf erstellt. Wobei die ersten vier Stellen für eine interne, numerische UserID (also z.B. 0001, 0002, etc.) steht.

Nun soll das ganze in ein anderen Ordner kopiert werden, wo es bereits Unterordner gibt im Format XXXX_UserName (also z.B. 0001_MaxMustermann, 0002_HansWurst, etc.).

Problem ist, dass ich den Ausgabedateinamen nicht ändern bzw. den Username nicht hinzufügen kann, so dass ich mir den String passend zurechtschneiden kann.
Eine Autocompletion (TAB-Vervollständigen, wie unter Unix oder auch Win), ist nach meinen bisherigen Recherchen nicht möglich.? Dann könnte ich einfach nach 0001 Suchen und copy in 0001<TAB>

Daher nun eine weitere Idee: Ich erstelle mir eine externe Liste (Userlist.txt) im Format
0001_MaxMustermann
0002_HansWurst
in welcher ich nach der UserID suche und dann für das copy die ganze Zeile hernehme.

Problem: Keine Ahnung wie ich das mache :)

Danke für eure/deine Hilfe!

Gruß
Matze
 

netkid

Grünschnabel
Hallo Matze,

hier ist eine Lösung.
Ich gehe davon aus, daß das Dateiformat "XXXX_irgendeinDateiname.pdf"
nicht mit "0001_MaxMustermann.pdf" identisch ist, sondern nur die ersten
vier Stellen für eine exakte Zuordnung in die Zielordner verwendbar ist.
Auch sollten die Dateinamen keine Leerzeichen enthalten.


Erstelle mit dem Notepad eine neue Datei z. B. "Umkopieren.bat".
Hier 'rein kopierst Du folgendes:

Code:
@echo off && title %~n0 && color 70
setlocal
rem Bitte Quellordner anpassen!
set Quellordner=C:\Daten\Test\Monat_01\

echo. && echo Kopiere alle Dateien um . . . && echo.
rem analog der Site:
rem http://suche.administrator.de/forum/Mit-welchem-Batchbefehl-kann-ich-zwischen-Dateien-unterscheiden-deren-Dateinamen-mit-Buchstaben-und-Zahlen-anfangen%3F-160376.html
for /f "delims=" %%i in ('dir /b %Quellordner%*.pdf^|findstr /b "[0-9][0-9][0-9][0-9]"') do call :Uprg %%i

echo.
pause
goto :Ende

:Uprg
set Dateiname=%~1
set ZielOrdner=%Dateiname:~0,4%
echo Kopiere %Dateiname% nach %ZielOrdner%
copy %Quellordner%%Dateiname% %Quellordner%%Dateiname:~0,4%
:Ende
Endlocal

Als Ergebnis erhälst Du:

Kopiere alle Dateien um . . .

Kopiere 1111_asdfghjksdf.pdf nach 1111
1 Datei(en) kopiert.
Kopiere 1111_bssdkfjsdkd.pdf nach 1111
1 Datei(en) kopiert.
Kopiere 2222_asdfghjksdf.pdf nach 2222
1 Datei(en) kopiert.
Kopiere 2222_bssdkfjsdkd.pdf nach 2222
1 Datei(en) kopiert.

Drücken Sie eine beliebige Taste . . .


Gruß, netkid
 

deepthroat

Erfahrenes Mitglied
Hi.

Um die Zuordnung UID -> Benutzername durchzuführen kannst du z.B. eine CSV Datei verwenden:
Code:
# user.csv
# UID | Username
0001,MaxMustermann
0002,HansWurst
Code:
for /f "eol=# tokens=1,2 delims=," %%i in (user.csv) do (
  echo.%%i -^> %%j
)
Gruß