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-Key: 303016

Url: https://administrator.de/contentid/303016

Printed on: April 18, 2024 at 15:04 o'clock

Member: Biber
Biber Apr 27, 2016 at 13:17:22 (UTC)
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
Member: MrCount
MrCount Apr 27, 2016 updated at 13:25:32 (UTC)
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
Member: bastla
bastla Apr 27, 2016 updated at 13:51:55 (UTC)
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
Member: smitternacht
smitternacht Apr 27, 2016 at 13:51:09 (UTC)
Goto Top
Vielen Dank. Leider führt das nur zum Fehler "Das System kann die angegebene Datei nicht finden".
Member: MrCount
MrCount Apr 27, 2016 at 13:52:56 (UTC)
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"   
Member: smitternacht
smitternacht Apr 27, 2016 at 13:55:09 (UTC)
Goto Top
set "D=C:\ProgramData\Swyx\Recording\Anlagenanschlüsse-HB-LM"
Member: MrCount
MrCount Apr 27, 2016 at 13:59:32 (UTC)
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
Member: smitternacht
smitternacht Apr 27, 2016 at 14:02:17 (UTC)
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.
Member: MrCount
Solution MrCount Apr 27, 2016 at 14:04:05 (UTC)
Goto Top
Also bei mir geht das...

vorher:
__m2016-04-27 15_54_56-ytesty

nachher:
__m2016-04-27 15_55_24-ytesty
Member: bastla
Solution bastla Apr 27, 2016 updated at 14:07:00 (UTC)
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
Member: smitternacht
smitternacht Apr 27, 2016 at 14:07:40 (UTC)
Goto Top
Die Batchdatei mußte in den selber Ordner, wo auch die Dateien liegen - dann geht es. Vielen Dank!!!
Member: MrCount
MrCount Apr 27, 2016 at 14:08:32 (UTC)
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
Member: MrCount
MrCount Apr 27, 2016 at 14:09:16 (UTC)
Goto Top
Sorry, hatte ich offensichtlich vergessen dazu zu schreiben, bzw. hätte das Script auch diesen Fall berücksichtigen können... face-wink
Member: bastla
bastla Apr 27, 2016 updated at 14:14:41 (UTC)
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