smitternacht
Goto Top

Dateien mit Teil des Dateinamen per Batch in Unterordner verschieben

Hallo,

ich muß hier Telefonmitschnitte automatisiert ablegen. Die Dateien sehen folgendermaßen aus:

Richtung#interneNummer##externeNummer#Datum#Uhrzeit.wav

Beispiel:

In#24##023147770#20160427#135844.wav (eigehend)
Out#24##... (ausgehend)

Nun sollen die Dateien für oder von der internen Nummer 24 in einen Unterordner 24 verschoben werden. Der Ordner soll automatisch angelegt werden, wenn er nicht vorhanden ist. Die interne Nummer ist variabel und kann sowohl zwei oder auch dreistellig sein, wobei nach der internen Nummer immer ein ## kommt.

Kann mir jemand ein passendes Skript dafür erstellen?

Content-ID: 303016

Url: https://administrator.de/forum/dateien-mit-teil-des-dateinamen-per-batch-in-unterordner-verschieben-303016.html

Ausgedruckt am: 06.04.2025 um 22:04 Uhr

Biber
Biber 27.04.2016 um 15:17:22 Uhr
Goto Top
Moin smitternacht,

willkommen im Forum.

Es gibt für dein Problem eigentlich eine Musterlösung.

Bitte schau dort mal rein, ob du es damit abfackeln kannst.
Wenn nicht (wegen zwei linke Hände oder soll auf jeden Fall ein fertiges One-Trick-Click-Tool sein oder Cheffe muss noch Rest-Budget durch den Schornschein jagen), dann gib bitte an
- unter welchem Betriebssystem
- ob alle Programmiersprachen erlaubt sind bei euch (in vielen DAX-notierten Unternehmen ist PowerShell nicht erlaubt)

Grüße
Biber
MrCount
MrCount 27.04.2016 aktualisiert um 15:25:32 Uhr
Goto Top
Hi smitternacht,

hier das sollte für dich passen:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set "D=DEIN\PFAD\ZUM\ORDNER"  

for /f %%a in ('dir "%D%\*.wav" /A:-D /B') do (  
   set "string=%%a"  
   for /F "tokens=2 delims=#" %%a in ("!string!") do (  
      if not exist %%a mkdir %%a
      move !string! %%a
   )
)
ENDLOCAL
bastla
bastla 27.04.2016 aktualisiert um 15:51:55 Uhr
Goto Top
@ MrCount

Sollte ja eigentlich ganz ohne "delayedExpansion" gehen - dafür wäre aber mE eine durchgängige Verwendung des Pfades (oder einfacher: pushd "%D%" / popd) sinnvoll ...

Grüße
bastla
smitternacht
smitternacht 27.04.2016 um 15:51:09 Uhr
Goto Top
Vielen Dank. Leider führt das nur zum Fehler "Das System kann die angegebene Datei nicht finden".
MrCount
MrCount 27.04.2016 um 15:52:56 Uhr
Goto Top
Wie sieht denn dein Code aus?
Hast du
set "D=DEIN\PFAD\ZUM\ORDNER"   

entsprechend geändert?

Also z.B.:
set "D=c:\hier\liegen\die\wav-dateien"   
smitternacht
smitternacht 27.04.2016 um 15:55:09 Uhr
Goto Top
set "D=C:\ProgramData\Swyx\Recording\Anlagenanschlüsse-HB-LM"
MrCount
MrCount 27.04.2016 um 15:59:32 Uhr
Goto Top
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
CHCP 1252

set "D=C:\ProgramData\Swyx\Recording\Anlagenanschlüsse-HB-LM"  

for /f %%a in ('dir "%D%\*.wav" /A:-D /B') do (  
   set "string=%%a"  
   for /F "tokens=2 delims=#" %%a in ("!string!") do (  
      if not exist %%a mkdir %%a
      move !string! %%a
   )
)
ENDLOCAL
smitternacht
smitternacht 27.04.2016 um 16:02:17 Uhr
Goto Top
So hat er auf jeden Fall mal alle Ordner angelegt. Die Fehlermeldung kommt allerdings nach wie vor - jetzt allerdings offensichtlich so oft, wie es Dateien dort gibt.
MrCount
Lösung MrCount 27.04.2016 um 16:04:05 Uhr
Goto Top
Also bei mir geht das...

vorher:
__m2016-04-27 15_54_56-ytesty

nachher:
__m2016-04-27 15_55_24-ytesty
bastla
Lösung bastla 27.04.2016 aktualisiert um 16:07:00 Uhr
Goto Top
@ MrCount

Könnte ja sein, dass bei smitternacht die Batchdatei nicht im Ordner mit den wav-Dateien liegt (und wenn doch, bräuchte es den Pfad in %D% gar nicht) ...

Grüße
bastla
smitternacht
smitternacht 27.04.2016 um 16:07:40 Uhr
Goto Top
Die Batchdatei mußte in den selber Ordner, wo auch die Dateien liegen - dann geht es. Vielen Dank!!!
MrCount
MrCount 27.04.2016 um 16:08:32 Uhr
Goto Top
Zitat von @bastla:
Könnte ja sein, dass bei smitternacht die Batchdatei nicht im Ordner mit den wav-Dateien liegt

DAS könnte natürlich sein... face-big-smile
MrCount
MrCount 27.04.2016 um 16:09:16 Uhr
Goto Top
Sorry, hatte ich offensichtlich vergessen dazu zu schreiben, bzw. hätte das Script auch diesen Fall berücksichtigen können... face-wink
bastla
bastla 27.04.2016 aktualisiert um 16:14:41 Uhr
Goto Top
hätte das Script auch diesen Fall berücksichtigen können...
... dann hätte es vermutlich etwa so ausgesehen (ungetestet):
@echo off & setlocal

for /f "tokens=3 delims=. " %%i in ('chcp') do set "CP=%%i"  
chcp 1252 >nul

pushd "C:\ProgramData\Swyx\Recording\Anlagenanschlüsse-HB-LM"  

for /f %%a in ('dir "*#*.wav" /b /a-d') do (  
   for /f "tokens=2 delims=#" %%i in ("%%a") do (  
      md "%%i" 2>nul  
      move "%%a" "%%i\"  
   )
)
popd
chcp %CP% >nul
Grüße
bastla